[#39548] [Bug #2291] Net::FTPでソケットをオープンする前にbinary=を呼び出すと落ちる — Akira Matsuda <redmine@...>

Bug #2291: Net::FTPでソケットをオープンする前にbinary=を呼び出すと落ちる

10 messages 2009/10/27

[#39592] infinite recursive call to C function — Yusuke ENDOH <mame@...>

遠藤です。

17 messages 2009/10/30
[#39596] Re: infinite recursive call to C function — Yukihiro Matsumoto <matz@...> 2009/10/30

まつもと ゆきひろです

[#39599] Re: infinite recursive call to C function — Nobuyoshi Nakada <nobu@...> 2009/11/02

なかだです。

[#39601] Re: infinite recursive call to C function — Yukihiro Matsumoto <matz@...> 2009/11/02

まつもと ゆきひろです

[ruby-dev:39428] Re: exception from open-uri

From: Yusuke ENDOH <mame@...>
Date: 2009-10-03 12:27:34 UTC
List: ruby-dev #39428
遠藤です。

2009年10月3日21:05 Tanaka Akira <akr@fsij.org>:
>> そこで提案ですが、open-uri の内部で発生した例外は open-uri の中で
>> すべて拾って、OpenURI::Error などと言った名前の例外にくるんで投げ
>> なおすというのはどうでしょうか。
>> ユーザは OpenURI::Error だけを拾えばいいということになって、気楽
>> です。
>
> この問題は open-uri 固有の問題には見えません。

その通りです。メールを送った直後に気がつきましたが、open-uri は
使用頻度のわりに例外が多種多様すぎたために最初に目に付いただけ
でした。


> つまりブロックつきメソッドの入れ子構造と例外捕捉のための入れ
> 子構造が異なるという問題なので、より一般的な解が望まれるよう
> に思います。

うーん。どんなのが考えられるでしょうね。


> open-uri としての解決法は、現時点では、ブロックをつけないで
> 使うのがいいのではないかと思います。
>
> 対象が大きくなければ、URI#read がお薦めです。
> (samidare はそうしています)

Kernel#open と同じように使えるという open-uri のありがたみが
ちょっと減った気がしましたが、Kernel#open にも似た問題はある
わけですね。とりあえず了解しました。


> あるいは、どうしてもブロックを使いたければ、試してませんがフ
> ラグを使うのはどうでしょうか。
>
> done = false
> begin
>  open(uri) {|f|
>    done = true
>    ...
>  }
> rescue StandardError
>  raise if done
>  ...
> end

うーん……。rescue にガードが書ければもう少し幸せそう。

-- 
Yusuke ENDOH <mame@tsg.ne.jp>

In This Thread

Prev Next