トップページ > プログラム > 2014年11月03日 > Yqw0F9So

書き込み順位&時間帯一覧

30 位/225 ID中時間01234567891011121314151617181920212223Total
書き込み数0000000000000101010000003



使用した名前一覧書き込んだスレッド一覧
デフォルトの名無しさん
748
Ruby 初心者スレッド Part 55

書き込みレス一覧

Ruby 初心者スレッド Part 55
748 :デフォルトの名無しさん[sage]:2014/11/03(月) 13:41:16.97 ID:Yqw0F9So
require 'timeout'
begin
 f = Fiber.new do
  timeout(1) do
   Fiber.yield
  end
 end
rescue
 p 1
end
begin
 f.resume
 sleep (2)
 f.resume
rescue
end

上記のコードで1が出力されるはずと期待していたら例外処理が補足されずに終了してしまいました。
sleep(2)でexecution expiredになるのは分かるんですが、何故補足されないんでしょうか?
Ruby2.0.0と2.1.4で試しましたが結果は同じでした。
Ruby 初心者スレッド Part 55
757 :デフォルトの名無しさん[sage]:2014/11/03(月) 15:57:33.59 ID:Yqw0F9So
>>750-751
ありがとうございます、理由はよく理解できました。
という事でtimeoutのexception_classを指定してみた所、下のrescueで補足するようになりました。
バグではないのかと気になりますが、どうなんでしょうね。
Ruby 初心者スレッド Part 55
764 :748[sage]:2014/11/03(月) 17:37:35.15 ID:Yqw0F9So
2.1.4でも結果は同じ、と書きましたが再度試した所捕捉しましたorz
恐らく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]


※このページは、『2ちゃんねる』の書き込みを基に自動生成したものです。オリジナルはリンク先の2ちゃんねるの書き込みです。
※このサイトでオリジナルの書き込みについては対応できません。
※何か問題のある場合はメールをしてください。対応します。