[ruby-list:39021] CGI#[] on Ruby 1.8.1

From: 堀川 久 <vzw00011@...>
Date: 2004-01-05 12:02:52 UTC
List: ruby-list #39021
明けましておめでとうございます。今年もよろしくです。

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/

In This Thread

Prev Next