From: Tanaka Akira Date: 2008-05-15T21:40:56+09:00 Subject: [ruby-dev:34721] Re: fork 不可能な環境での test_argv0_noarg In article <20080515210433.2577.C613B076@garbagecollect.jp>, "U.Nakamura" writes: > 例えば system はあるけど systemable? はない、ということを確認 > する必要があるなら、その確認の過程でtypoが入る可能性は減るん > じゃないかという気がします。 いちばん typo に気がつきやすい書き方はいきなり目的のメソッド を呼んで、NotImplementedError を rescue することではないでしょ うか。 begin Process.setrlimit(...) rescue NotImplementedError ... end などとすれば、setrlimit に typo が入れば、NoMethodError にな るので、(おそらく) アプリケーションは中断され、すぐに気がつ くことができます。 もちろん、副作用の話がありますから、常にこのスタイルで書ける わけではないでしょうが、setrlimit で制限できれば制限するが setrlimit がなければ気にしないで続ける、といった状況ではいき なり呼び出すことが可能です。 しかし、setrlimit がない環境でメソッドを定義されなくなると、 このスタイルが使えなくなります。あえて同じスタイルで書くとす れば begin Process.setrlimit(...) rescue NoMethodError ... end というように NoMethodError を rescue することになりますが、 こうすると setrlimit に入り込む typo を防げなくなります。 setrlimit を typo すると、メソッドがないので NoMethodError になり、setrlimit がないときの処理に進んでしまいます。 従って、環境依存なメソッドを定義しないようにすることには反対 します。 しかし、このスタイルが使えない状況でも一般的に判断できるのが 望ましいのは確かで、呼び出すと NotImplementedError になるが、 respond_to? には偽を返すメソッドを導入するというのを提案する のはそういうわけです。 -- [田中 哲][たなか あきら][Tanaka Akira]