- 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]
|