[#39021] CGI#[] on Ruby 1.8.1 — 堀川 久 <vzw00011@...>
明けましておめでとうございます。今年もよろしくです。
2 messages
2004/01/05
[#39026] Re: CGI#[] on Ruby — 堀川 久 <VZW00011@...>
おはようございます。
7 messages
2004/01/07
[#39031] ruby-mysqlのlist_dbs — Takashi Kanai <kanai@...4u.or.jp>
こんにちは、金井です。
5 messages
2004/01/08
[#39040] 内包オブジェクトがnilになったら自分もnilになるには? — Yac <yac@...>
岡といいます。こんにちは。
9 messages
2004/01/13
[#39051] — ruby@...
みなさん、こんにちは。みかみと申します。
7 messages
2004/01/19
[#39052] Re: compile error in ext/openssl
— GOTOU Yuuzou <gotoyuzo@...>
2004/01/19
In message <20040119074144.9461EAF55@mail.nmn.jp>,
[#39073] Ruby1.8のWIN32OLEで-wのとき — Takashi Kanai <kanai@...4u.or.jp>
金井です。
12 messages
2004/01/24
[#39074] Re: Ruby1.8のWIN32OLEで-wのとき
— Yac <yac@...>
2004/01/25
岡といいます。
[#39075] Re: Ruby1.8のWIN32OLEで-wのとき
— Takashi Kanai <kanai@...4u.or.jp>
2004/01/25
金井です。
[#39076] Re: Ruby1.8のWIN32OLEで-wのとき
— Yac <yac@...>
2004/01/25
岡です。
[#39077] Re: Ruby1.8のWIN32OLEで-wのとき
— Takashi Kanai <kanai@...4u.or.jp>
2004/01/25
金井です。
[#39078] Re: Ruby1.8のWIN32OLEで-wのとき
— "U.Nakamura" <usa@...>
2004/01/25
こんにちは、なかむら(う)です。
[ruby-list:39026] Re: CGI#[] on Ruby
From:
堀川 久 <VZW00011@...>
Date:
2004-01-07 00:18:25 UTC
List:
ruby-list #39026
おはようございます。
> Date: Mon, 5 Jan 2004 22:03:38 +0900
> From: matz@ruby-lang.org (Yukihiro Matsumoto)
> Reply-To: ruby-list@ruby-lang.org
> To: ruby-list@ruby-lang.org (ruby mailing list)
>
> |文字列(Stringインスタンス)が期待されているところでは、is_a?(String)
> |として値(のクラス)が正しいか検査することがあります。あるいはクラスに
> |よって挙動を変えることもあります。
> |
> |このため、文字列と思ってCGI#[]の戻り値を使っていると、いろいろな場所で
> |エラーになったり、予期しない挙動になったりしています。例えばRuby/DBIな
> |どでもエラーが頻出します。
> |
> |これを避けるためには、次のように書かなければならず、悲しくなります。
>
> しかし、長年is_a?で検査するのは悪いスタイルだと口を酸っぱく
> して言ってるわけですから、これをどこまでサポートするべきなの
> かは疑問です。
例えば引数のクラスによって挙動を変える(私はこの手のは書きませんけど)場合など
にis_a?が多用されているようです。メソッドの有無により判定するより簡単だからで
しょうか。
また、引数のクラスのassertionにもよく使われると思います。これは私も多用してい
ます。
悪いスタイルと言われても、現に幅広く普及しているので、できるかぎりサポートした
ほうが嬉しいです。
> |潔く、次のようにしませんか。
> |
> | 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
>
> これはこれで動かないプログラムが出るような気がするんですが、
> それは構わないんですか?
1.6用に書かれたアプリケーションがエラーになりますが、1.8で採られた対策も完璧で
はない(何しろ本物のArrayインスタンスではない)ので、アプリケーション全体にわ
たるテストが欠かせません。
このような場合、私はcgi.rbをrequireした後にCGI#[]を1.6互換と置き換える小さなコ
ードを書いています。
この方法で1.6用のスクリプトを安全に動かせるので、1.8はシンプルにしてはどうでし
ょうか。
よろしくお願いします。