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

 ささだです.

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

 ささだです.

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

From: "Makoto Kuwata" <kwa@...>
Date: 2007-11-25 15:09:10 UTC
List: ruby-list #44276
桑田といいます。
cgi.rbについて質問です。

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

(2) CGI::HtmlExtensionを別ファイルに分離する計画はありますか。
    CGIアプリだとcgi.rbの読み込みに結構時間がかかるのですが、
    HtmlExtensionを消すと読み込み時間が半分くらいになりました。

(3) 2268行目の CGI::initialize() で extend QueryExtension を
    実行していますが、あらかじめ include しておくのではなく、
    毎回 extend するのはなぜでしょうか。
    ざっと見た限りだと、include でも問題ないように見えました。

(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


以上です。よろしくお願いします。

--
makoto kuwata

In This Thread

Prev Next