[#44237] Float を利用するRubyプログラム — SASADA Koichi <ko1@...>

 ささだです.

16 messages 2007/11/17
[#44241] Re: Float を利用するRubyプログラム — SASADA Koichi <ko1@...> 2007/11/19

 ささだです.

[ruby-list:44277] Re: [Q] cgi.rbについての質問

From: Yukihiro Matsumoto <matz@...>
Date: 2007-11-25 23:47:34 UTC
List: ruby-list #44277
まつもと ゆきひろです

In message "Re: [ruby-list:44276] [Q] cgi.rbについての質問"
    on Mon, 26 Nov 2007 00:09:10 +0900, "Makoto Kuwata" <kwa@kuwata-lab.com> writes:

|(1) cgi.rb のテストスクリプトはありますか。
|    1.8.6のソースには見当たりませんでした。

cgi.rbは現在作者が到達可能ではないので私が「消極的メンテナ」
を担当しています。ので、作者がテストスクリプトを書いていない
ので、存在しないと思います。

この後の(2)〜(3)の質問に関しても「なぜか」の部分は答えられま
せん。cgi.rbはPerlのcgi-libの影響を受けていますから、その辺
の理由もあるでしょうし、作者の気まぐれもあるでしょう。

|(4) CGI::parse() は以下のように定義されてますが(895行目)、
|
|      def CGI::parse(query)
|        params = Hash.new([].freeze)
|        query.split(/[&;]/n).each do |pairs|
|          key, value = pairs.split('=',2).collect{|v| CGI::unescape(v) }
|          if params.has_key?(key)
|            params[key].push(value)
|          else
|            params[key] = [value]
|          end
|        end
|        params
|      end
|
|    これを次のように書き換えたとしても大丈夫でしょうか。
|    問題は、freezeした配列を使い回していいのかという点です。
|
|      FROZEN_ARRAY = [].freeze
|      def CGI::parse(query)
|        params = {}
|        query.split(/[&;]/n).each do |pairs|
|          key, value = pairs.split('=',2)
|	  (params[CGI::unescape(key)] ||= []) << CGI::unescape(value)
|        end
|        params.default = FROZEN_ARRAY
|	params
|      end

いいんじゃないでしょうか。Frozenなんだし。

                                まつもと ゆきひろ /:|)

In This Thread