新井です。 In message "[ruby-list:33352] Re: IPSocket.getaddress" on 13 Jan 2002 17:04:49 +0900, Tanaka Akira <akr / m17n.org> wrote: > In article <hvo66668ztc.fsf / coulee.a02.aist.go.jp>, > Tanaka Akira <akr / m17n.org> writes: > > > resolv.rb 内部でも timeout を使っているので、外で設定した timeout が中 > > で捕捉されているようですね。 > > > > まぁ、resolv.rb では(一般にはライブラリでは) TimeoutError は使うべきで > > はないのかも知れませんね。 > > 次のように修正するとどうでしょう? おお、先走ってマニュアルに書いときました。timeout.rb に書くべきだったか。 まあいいや。 | = TimeoutError < Interrupt | | ((<timeout.rb>)) で定義される例外クラスです。関数 (({timeout})) がタイ | ムアウトすると発生します。 | | ライブラリで ((<timeout.rb>)) を使う場合は、ユーザが指定した timeout | を捕捉しないように、TimeoutError のサブクラスを定義してライブラリ内では | これを使用した方が無難なんです。 | | ==> foo.rb <== | require 'timeout.rb' | class Foo | FooTimeoutError = Class.new(TimeoutError) | def longlongtime_method | timeout(100, FooTimeoutError) { | ... | } | end | end | | ==> main.rb <== | require 'foo' | timeout(5) { | Foo.new.longlongtime_method | } | | ((-注: あらい 2002-01-13: [ruby-list:33352] のパッチが必要です-)) -- 新井康司 (Koji Arai)