Ruby 初心者スレッド Part 55
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
2014/06/21(土) 23:39:44.94ID:rKd1VvW8質問するときは、OSやRubyのバージョン、エラーメッセージを書いたほうがいいお
RoRはスレ違いよ
前スレ
Ruby 初心者スレッド Part 54
http://peace.2ch.net/test/read.cgi/tech/1392598207/
るりまサーチ (リファレンス検索)
http://rurema.clear-code.com/
Rubyist Magazine - るびま
http://jp.rubyist.net/magazine/
逆引きRuby
http://www.namaraii.com/rubytips/
0756デフォルトの名無しさん
2014/11/03(月) 15:55:53.88ID:IO/fHbsZご指摘通り確かに範囲外インデックスが入ってると落ちちゃうね
落ちずにnilを返すようにはできるけど、nilが入ってる場合と違いがわからんしなあ
高階関数で対応するイメージが湧かないので教えてほしい
>>754
ということで範囲外インデックスが入りえる場合は気を付けて!
0757デフォルトの名無しさん
2014/11/03(月) 15:57:33.59ID:Yqw0F9Soありがとうございます、理由はよく理解できました。
という事でtimeoutのexception_classを指定してみた所、下のrescueで補足するようになりました。
バグではないのかと気になりますが、どうなんでしょうね。
0758デフォルトの名無しさん
2014/11/03(月) 16:21:40.77ID:aZ1lF/ar>という事でtimeoutのexception_classを指定してみた所、下のrescueで補足するようになりました。
exception_classを指定しなくとも、>>748 のコードのままでも下の rescue で例外は補足されている
下の resucue というコードを rescue => ex; p ex へと書き換えれば、
#<Timeout::Error: execution expired> という出力を確認できるはず
>バグではないのかと気になりますが、どうなんでしょうね。
Fiber.yield でコンテクストを親に切り替えた後にタイムアウト例外が発生し、
その例外は切り替わった親の(=下の) resucue で補足されている
>>750 で書いたことを繰り返すけど、Ruby は>>748 のコードに従って忠実に動いているはずだ
それなのに、なぜこれをバグを感じるのか意味不明だね
0759デフォルトの名無しさん
2014/11/03(月) 16:51:25.89ID:UKuQYTWzありがとうございます。勉強になりました。
0760デフォルトの名無しさん
2014/11/03(月) 17:02:08.57ID:IO/fHbsZ実行してみた?
色々言う前にまずは自分で書いた通り実行して確認してみなよ
なぜか例外にTimeout::Errorじゃない無名のクラスが投げられてきてて
rescue Exception とかしないと補足できないから
http://ideone.com/jtxDYd (p exと書いてみたけどエラーは変わらない)
http://ideone.com/9ctjA2 (Exceptionすべて補足すればいける)
http://ideone.com/0MytXY (757の書いた通りでもいける)
0761デフォルトの名無しさん
2014/11/03(月) 17:03:48.53ID:IO/fHbsZ正 捕捉
誤 補足
0762デフォルトの名無しさん
2014/11/03(月) 17:11:36.03ID:IO/fHbsZおお、こちらもいろいろ言う前に考えが足りなかった、すまん
ver違いで発生有無が違ったから、すでに修正されたバグなのかもしれん
上記の通り無名の例外が発生
1.9.3p547 (2014-05-14 revision 45962) [i386-cygwin]
2.0.0p481 (2014-05-08) [x64-mingw32]
2.0.0p481 (2014-05-08 revision 45883) [i386-cygwin]
正しくTimeout::Errorが発生
2.1.2p95 (2014-05-08 revision 45877) [i386-cygwin]
0763デフォルトの名無しさん
2014/11/03(月) 17:12:32.08ID:aZ1lF/ar同じコードであっても、Ruby のバージョンによって振る舞いが変わるみたいだね
$ ruby1.9 timeout2.rb
prog.rb:13:in `sleep': execution expired from timeout2.rb:13:in `<main>'
$ ruby2.0 timeout2.rb
prog.rb:13:in `sleep': execution expired from timeout2.rb:13:in `<main>'
$ ruby2.1 timeout2.rb
#<Timeout::Error: execution expired>
0764748
2014/11/03(月) 17:37:35.15ID:Yqw0F9So恐らくpikで切り替え忘れてirbで実行したのが原因だと思います…
2.0系では駄目でしたが、2.1系なら大丈夫そうですね。
捕捉せず
ruby 2.0.0p481 (2014-05-08) [i386-mingw32]
ruby 2.0.0p594 (2014-10-27) [i386-mingw32]
捕捉
ruby 2.1.4p265 (2014-10-27 revision 48166) [i386-mingw32]
0765名無しさん
2014/11/03(月) 22:33:03.64ID:LLz3qGqswin8のcore i7です
0766デフォルトの名無しさん
2014/11/03(月) 22:34:40.73ID:UgEZQqgs素直にC#+XNAが吉
0767デフォルトの名無しさん
2014/11/03(月) 22:40:36.85ID:UgEZQqgsSharpDXとか?になるんだろうか
0768名無しさん
2014/11/03(月) 22:47:27.00ID:LLz3qGqshddも1tbあるので
0769デフォルトの名無しさん
2014/11/03(月) 22:49:25.47ID:UgEZQqgsいまどきデュアルブートするぐらいならVM使った方がいいと思うけど…
0770デフォルトの名無しさん
2014/11/03(月) 22:50:06.32ID:x848GwYR0771名無しさん
2014/11/03(月) 23:34:46.76ID:LLz3qGqs0772名無しさん
2014/11/03(月) 23:37:17.91ID:LLz3qGqsどっかでcygwinはエラーが多いと聞いた気がしましたが
なにか不都合ありますか?
0773デフォルトの名無しさん
2014/11/04(火) 00:03:40.32ID:WEGF7NZuじゃあ32bit版も入れれば
0774デフォルトの名無しさん
2014/11/04(火) 03:06:41.92ID:30WYsMeZwin8のcore i7なら仮想環境にするか、
USBから外付けHDD・USBメモリから、Linuxすれば?
win8で同一ディスクからのデュアルブートは、
UEFI・GPT・リカバリー領域など、
ややこしいことが一杯あって、win8を消してしまうかも!
あまり成功例を聞かない
0775名無しさん
2014/11/04(火) 07:30:11.08ID:3vhPZ6VFそうします
0776デフォルトの名無しさん
2014/11/05(水) 00:05:20.96ID:AIrAdXYOGCが原因でカクついたりすると爽快感台無しになるし
そこでハマって調整に時間かかるとスクリプト言語選んだ
意味ないしで悩むところだ。
0777デフォルトの名無しさん
2014/11/05(水) 09:49:19.03ID:6cY/hPez0778デフォルトの名無しさん
2014/11/06(木) 00:52:04.32ID:40Lk17ezFile::open("./hoge") {|f|
while line = f.gets
end
lineAry = line.split(",")
}
って感じにしたのですが、undefined method `split' for nil:NilClass (NoMethodError)ってエラーが出てしまいわからなくなってしまいました
解決方法教えてください・・・・
0779デフォルトの名無しさん
2014/11/06(木) 01:24:27.67ID:tQmqHd/Hline.chop.split(/,/)
}
0780デフォルトの名無しさん
2014/11/06(木) 02:01:45.45ID:4jfyym2cその通り書いてあるものだとして、
while line = f.gets
end
を抜けているということは
line = f.getsがnilかfalseになっているということ
実際にはnilなわけだが、それに対して
line.split(",")
と"split"メソッドを呼び出してるけど、nilにはそんなメソッドはないよというエラー
while line = f.gets
"処理"
end
というのをどこかで見て引っ張ってきたんだろうけど
これが意味してるところを理解しないと
getsというのがこの場合、ファイルを一行ずつ読み込むメソッドで、最後の行に達したらnilを返すようになってる
つまり、ファイルを一行読み込んでlineに代入。nilでなければ(ちゃんと読み込めてたら)"処理"を行うという意味
0781デフォルトの名無しさん
2014/11/06(木) 02:29:54.61ID:e2GU7rkaクラスメソッドのアクセスに :: は使わない。ドットを使う
while 〜 endはそれでないと動作しない目的以外では使わない。each(を元にした各種メソッド)を使う
ファイル内容の取得にgetsは通常使わない。readやeach_lineを使う
lowerCamelCaseはとりあえず使わないようにする。snake_caseを使う習慣をとりあえずつけとく ※オプション
RubyにはEnumerableをeachで回すという概念/クラスがあって、基本的には
配列やハッシュ.each do |一個|
# ここで一個をなんかする
end
または
配列やハッシュ.each{ |一個| #ここでなんかする }
という形になる
Fileクラスにはオープンしたファイル内容を全部読み込んで文字列として返すインスタンスメソッドreadや
改行だと思われるとこで適当に切って配列にして返すインスタンスメソッドeach_lineがある
なので、「ファイルを読み込んで読み込んだものを","で分割したい」を
「ファイルを開いて1行づつ読み込んでその行を","で分割して配列に格納する」または
「ファイルを開いてテキストファイル全体を","で分割して配列に格納する」と<翻訳>して
前者は>>779のように、後者なら
splited =File.open(path).read.split(/,/)
とか書く
処方箋としては「まともな解説を最初のほうから読む」くらいしか思いつかない
「ペダルを回すと前に進むらしいんですがどうすればいいですか!」とか言って自転車のペダルだけ手で回してる状態
まず跨って乗ってくれ
0782デフォルトの名無しさん
2014/11/06(木) 18:10:15.86ID:c7fp/ougend
lineAry = line.split(",")
↓
while line = f.gets
lineAry = line.split(",")
end
0783デフォルトの名無しさん
2014/11/06(木) 18:20:26.70ID:1AJgCGK+動作しましたがlineAryに最後の行しか入っていません と言われるオチ
0784デフォルトの名無しさん
2014/11/06(木) 23:16:51.51ID:KqnzrEM2gcの動きは?セキュリティホールは?スクリプト言語も実は楽じゃない。
0785デフォルトの名無しさん
2014/11/07(金) 06:04:19.34ID:XfEMsduwたまに必要になった時にそう感じるだけ
0786デフォルトの名無しさん
2014/11/09(日) 06:33:32.65ID:gF5CsO0E完璧主義も破綻する
どっち付かずの中途半端主義者しか生き残れないゴミみたいなゲームまだやってんの?
0787デフォルトの名無しさん
2014/11/09(日) 14:50:38.45ID:ZDxM+nfGchop より chomp の方が良いと思う。
0788デフォルトの名無しさん
2014/11/10(月) 04:23:28.54ID:nN3Hg8Jd0789デフォルトの名無しさん
2014/11/10(月) 08:25:58.99ID:jDCBd3CZA,B,C
1,2,3
あ,い,う
それとも、改行はなく1行のみの、カンマ区切りなのか?
a,b,c,1,2,3,あ,い,う
0790デフォルトの名無しさん
2014/11/10(月) 22:11:39.06ID:8QediavH~/.rbenv/plugins/rucby-build
になっているページが多くあるんですが
rucbyになっている意味って思い当りますか?
typoした情報が広まっちゃっただけですかね
0791デフォルトの名無しさん
2014/11/10(月) 22:37:30.07ID:BCpYGTgNうひょおおおおおお
http://www.google.co.jp/search?num=50&lr=&hl=ja&q=rucby-build&nfpr=1&sa=X
0792デフォルトの名無しさん
2014/11/10(月) 23:08:48.98ID:LMH7nFF4>>790
typoが広まっているのは立教大キャンパス?www
0793デフォルトの名無しさん
2014/11/11(火) 00:12:22.99ID:OobmUzAzさすが三流大学
0794デフォルトの名無しさん
2014/11/11(火) 22:24:32.20ID:IKuwQGRaclass Test
def initialize(*arg)
end
end
Test.new(*Array.new(10 ** 5))
これが stack level too deep (SystemStackError)になってしまうのは何故なんでしょう?
何をスタックに積んでるのかまったくイメージできません。
ちなみにinitialize以外のメソッドでは、同様の書き方でも問題ないようです。
0795デフォルトの名無しさん
2014/11/11(火) 22:41:18.34ID:wcU8x7LdRuby のメソッド呼び出しでパラメタの頭に * を付けると、パラメタを展開して渡す
つまり、
Test.new(*Array.new(10))
というコードは、以下と同じ
ary = Array.new(10)
Test.new(ary[0], ary[1], ary[2], ary[3], ary[4], ary[5], ary[6], ary[7], ary[8], ary[9])
で、一般に手続き/関数/メソッドの引数は言語処理系内部のスタック上もしくはヒープ上に割り当てられる
Ruby の場合には、メソッド new によるオブジェクト生成時にはスタックを使っていて、
それがオーバーフローした(=システムスタックの上限を越えて溢れた)のだろうね
いずれにせよ、10 ** 5 個もの引数を渡すコードは非常識だから、予期しないエラーとなっても不思議ではない
>>794 のコードを
Test.new(Array.new(10 ** 5))
と書き直せば(=パラメタの頭に付けた * を外せば)、期待した動作になるはずだよ
0796794
2014/11/12(水) 11:49:56.88ID:ltmCpT66どうも引数全般がスタックを使ってるみたいですね
initialize以外大丈夫だと書きましたが、更に配列を増やすとやはりだめでした
お騒がせしました
0797デフォルトの名無しさん
2014/11/13(木) 11:41:28.38ID:0GszBHHHRubyみたく哀れな言語を使わなくてすむようになるのがうれしい
0798デフォルトの名無しさん
2014/11/13(木) 12:07:29.72ID:7ZjHj42h0799デフォルトの名無しさん
2014/11/13(木) 14:19:37.64ID:sincN6ICなんか質問ある?
0800デフォルトの名無しさん
2014/11/13(木) 17:40:34.42ID:17cnbPeU何か目新しい報告はあった?
0801799
2014/11/13(木) 18:33:52.15ID:sincN6IC来週アメリカでなんか発表するらしいけど、教えてくんなかったorz
Ruby Prize 2014 受賞者は柴田さんだった
あと、.NETがオープンソース化されてるのは知らんかった。
0802デフォルトの名無しさん
2014/11/14(金) 14:45:10.38ID:Y6976A5Yhairetsu.include?(/正規表現/)
が認識しないみたいなんですがいい代替案ありますかね?
0803デフォルトの名無しさん
2014/11/14(金) 14:46:19.79ID:rxnPKvOr0804uy
2014/11/14(金) 14:48:38.59ID:jCz39Be/ちょっと下ネタになってしまうのですが、
みんなとこの気持ちを共有したいというか
0805デフォルトの名無しさん
2014/11/14(金) 14:51:11.05ID:PoP9COyzary.grep /re/
0806デフォルトの名無しさん
2014/11/14(金) 14:54:39.54ID:Y6976A5Yサンクス
0807デフォルトの名無しさん
2014/11/14(金) 14:56:58.11ID:oheSvaLqとかどうでしょう。
0808デフォルトの名無しさん
2014/11/14(金) 14:58:09.85ID:oheSvaLq0809デフォルトの名無しさん
2014/11/15(土) 13:46:51.20ID:s1wDRj1ulog("value"){ log(1); log(2); log("sub value"){log(3);} }
出力
log category: value
1
2
log category: sub value
3
0810デフォルトの名無しさん
2014/11/15(土) 16:19:12.50ID:RzrSosLrXML,JavaScriptのJQueryなどのレベルの話
0811デフォルトの名無しさん
2014/11/15(土) 16:20:29.70ID:x8Hc1054pretty print が似たようなインタフェースのような気がする
0812デフォルトの名無しさん
2014/11/15(土) 16:50:42.74ID:gniD1qRIformat =<<EOS
value:
- 1
- 2
- sub_value:
-3
EOS
log(format)
0813デフォルトの名無しさん
2014/11/17(月) 20:12:13.72ID:Zff6ZJ9C改行コードはみんなどれを使ってるの?
RoRがよく使われる→Linuxでのサーバで動かす事が多い→じゃあLFで
と思ってるんだけどどうなんだろ
0814デフォルトの名無しさん
2014/11/17(月) 20:26:34.24ID:KnCa0+eCLinux上で書いてるしツール使うしLFだ。
0815デフォルトの名無しさん
2014/11/17(月) 20:44:52.20ID:Rk/OFXwa公開しないなら好きにせえ
ちなみに「UTF-8のテキストデータファイル」の改行はCRLFが好ましい
めんどくさいっすな
0816デフォルトの名無しさん
2014/11/17(月) 22:49:11.65ID:waLJuR/4フォームデータは大抵CRlFで送られてくるんだからDBもソースも統一すればいいじゃん
0817デフォルトの名無しさん
2014/11/18(火) 00:07:31.51ID:zO/+2tjaruby -e 'puts $:'
というワンライナーは何をするものですか?
0818デフォルトの名無しさん
2014/11/18(火) 00:41:56.74ID:gfsRu8uJ0819デフォルトの名無しさん
2014/11/18(火) 09:33:02.58ID:zO/+2tja0820デフォルトの名無しさん
2014/11/19(水) 00:24:48.78ID:MmxntMffhttp://fox.2ch.net/test/read.cgi/poverty/1416286592/
0821デフォルトの名無しさん
2014/11/19(水) 15:03:51.14ID:JZ2oYyd90822デフォルトの名無しさん
2014/11/19(水) 21:30:03.59ID:bEK2kswG後で後悔することになる
0823デフォルトの名無しさん
2014/11/19(水) 22:28:07.63ID:eeZRz+g3アンチRubyの悲痛な叫びが心地よい
0824デフォルトの名無しさん
2014/11/19(水) 22:57:16.50ID:W0VjaeDS完璧な言語が出るまでコードを1行もかかない、あなた勝ち組ですね。がんばって勝ち続けてください。
0825デフォルトの名無しさん
2014/11/19(水) 23:21:14.70ID:pniQ/9rVRubyは下の方だから
0826デフォルトの名無しさん
2014/11/19(水) 23:27:57.56ID:DTfPg3SF0827デフォルトの名無しさん
2014/11/19(水) 23:35:12.66ID:tsrrXfqY察してやろうぜ
0828デフォルトの名無しさん
2014/11/20(木) 00:03:37.59ID:W0VjaeDS0829デフォルトの名無しさん
2014/11/20(木) 00:32:02.49ID:Po2bP3CX地球温暖化を促進する人類の敵
0830デフォルトの名無しさん
2014/11/20(木) 00:35:02.06ID:wJ3BgpRF・オブジェクト指向プログラミング
・関数型プログラミング
を学び&それを実践したいのであれば、
数あるスクリプト言語の中でも Ruby が最良の選択
(もしS式に拒否反応が無ければ Scheme 等のLisp族でもいいんだけどね)
0831デフォルトの名無しさん
2014/11/20(木) 01:38:44.14ID:Po2bP3CX今から始めるとか馬鹿
0832デフォルトの名無しさん
2014/11/20(木) 02:12:28.23ID:e9ZJqUMF0833デフォルトの名無しさん
2014/11/20(木) 02:30:11.35ID:wwhDP9Xoこいつからジェンガを取り上げた奴は名乗り出ろ
せっかく一人で遊んでいたんだぞ
0834デフォルトの名無しさん
2014/11/20(木) 07:04:02.44ID:pbftQxxbこれほどeach(=副作用)が多用される言語も珍しい
0835デフォルトの名無しさん
2014/11/20(木) 07:16:53.48ID:c59L+Vlf0836デフォルトの名無しさん
2014/11/20(木) 11:04:10.34ID:8q4P6WgWちゃんと技術的に劣ったものであると啓蒙しないと
0837デフォルトの名無しさん
2014/11/20(木) 11:26:45.76ID:EmAWw9wC0838デフォルトの名無しさん
2014/11/20(木) 11:34:28.77ID:oY1GPGoB0839デフォルトの名無しさん
2014/11/20(木) 17:04:35.26ID:PQZG72rlどっちかしか認めないような潔癖な人には使えんけど
自分で使い分けられれば柔軟性抜群
0840デフォルトの名無しさん
2014/11/20(木) 17:49:56.50ID:caZHrNzS言語のアンチに見えるけど、中身は事大主義者。
0841デフォルトの名無しさん
2014/11/20(木) 18:12:45.00ID:IC7tS2EU0842デフォルトの名無しさん
2014/11/20(木) 20:57:03.73ID:/tpcb8RQいっぱいいるよ
0843デフォルトの名無しさん
2014/11/21(金) 00:58:04.29ID:giR2E1os0844デフォルトの名無しさん
2014/11/21(金) 01:03:48.65ID:60xXXhMX0845デフォルトの名無しさん
2014/11/21(金) 04:06:02.72ID:eKmyEZjy0846デフォルトの名無しさん
2014/11/21(金) 05:30:28.73ID:cPEjXala詳しく頼む
定期的にこの煽りがあるけど
単発ばっかで要領を得ないんだわ
0847デフォルトの名無しさん
2014/11/21(金) 07:05:19.39ID:sRt7xdzZ0848デフォルトの名無しさん
2014/11/21(金) 07:45:59.05ID:R5E6cwETね
0849デフォルトの名無しさん
2014/11/21(金) 20:05:33.20ID:TFSPfM6y0850デフォルトの名無しさん
2014/11/21(金) 20:34:56.03ID:cSM/9qCo0851デフォルトの名無しさん
2014/11/22(土) 15:01:29.78ID:Fg4QwLMY0852デフォルトの名無しさん
2014/11/22(土) 17:55:36.10ID:0Ov5Rq+L0853デフォルトの名無しさん
2014/11/22(土) 18:07:21.85ID:X2dPHIKP0854デフォルトの名無しさん
2014/11/22(土) 21:17:33.94ID:l5CnwIKYもっとこなれてこないとね
0855デフォルトの名無しさん
2014/11/24(月) 00:27:11.00ID:kZ0WyWVZsleepを連続して実行していくとどうしても誤差が蓄積してしまうので時刻で実行したいです
■ このスレッドは過去ログ倉庫に格納されています