From: "堀川 久" Date: 2004-01-05T21:02:52+09:00 Subject: [ruby-list:39021] CGI#[] on Ruby 1.8.1 明けましておめでとうございます。今年もよろしくです。 Ruby 1.8.1で、CGI#[]の戻り値のクラスであるCGI::QueryExtension::Valueが Stringの派生クラスではなくなりましたが、副作用が出ています。 文字列(Stringインスタンス)が期待されているところでは、is_a?(String) として値(のクラス)が正しいか検査することがあります。あるいはクラスに よって挙動を変えることもあります。 このため、文字列と思ってCGI#[]の戻り値を使っていると、いろいろな場所で エラーになったり、予期しない挙動になったりしています。例えばRuby/DBIな どでもエラーが頻出します。 これを避けるためには、次のように書かなければならず、悲しくなります。 foo = cgi["foo"].to_s ~~~~~ .firstを書いていたときと変わらない! 潔く、次のようにしませんか。 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 -- HORIKAWA Hisashi (in Kanji: 堀川 久) Netsphere Laboratories http://www.nslabs.jp/