From: matz@... (Yukihiro Matsumoto) Date: 2004-01-05T22:03:38+09:00 Subject: [ruby-list:39022] Re: CGI#[] on Ruby 1.8.1 まつもと ゆきひろです In message "[ruby-list:39021] CGI#[] on Ruby 1.8.1" on 04/01/05, 堀川 久 writes: |Ruby 1.8.1で、CGI#[]の戻り値のクラスであるCGI::QueryExtension::Valueが |Stringの派生クラスではなくなりましたが、副作用が出ています。 | |文字列(Stringインスタンス)が期待されているところでは、is_a?(String) |として値(のクラス)が正しいか検査することがあります。あるいはクラスに |よって挙動を変えることもあります。 | |このため、文字列と思ってCGI#[]の戻り値を使っていると、いろいろな場所で |エラーになったり、予期しない挙動になったりしています。例えばRuby/DBIな |どでもエラーが頻出します。 | |これを避けるためには、次のように書かなければならず、悲しくなります。 しかし、長年is_a?で検査するのは悪いスタイルだと口を酸っぱく して言ってるわけですから、これをどこまでサポートするべきなの かは疑問です。 |潔く、次のようにしませんか。 | | def [](key) | params = @params[key] | value = params[0] | if @multipart | if value | return value | elsif defined? StringIO | StringIO.new("") | else | Tempfile.new("CGI") | end | else | value || "" # 文字列を返す。 | end | end これはこれで動かないプログラムが出るような気がするんですが、 それは構わないんですか? まつもと ゆきひろ /:|)