[#47414] <=>の意味は? — "T.Soejima" <clev@...2.so-net.ne.jp>

そえじま@勉強中です。

37 messages 2010/09/17
[#47420] Re: <=>の意味は? — 藤川浩明 <fhir0aki3@...> 2010/09/17

 他の方がすでに解答されているみたいですが、一応僕なりの答えを書いてみます。僕もRuby初心者なのではっきりとは言えないんですが・・・。

[#47422] Re: <=>の意味は? — "T.Soejima" <clev@...2.so-net.ne.jp> 2010/09/17

そえじま@勉強中です。

[#47424] Re: <=>の意味は? — "Y. NOBUOKA" <nobuoka@...> 2010/09/17

信岡です。

[#47426] Re: <=>の意味は? — "T.Soejima" <clev@...2.so-net.ne.jp> 2010/09/17

そえじま@勉強中です。

[#47428] Re: <=>の意味は? — "Y. NOBUOKA" <nobuoka@...> 2010/09/17

そえじまさん

[#47429] Re: <=>の意味は? — "T.Soejima" <clev@...2.so-net.ne.jp> 2010/09/17

そえじま@勉強中です。

[#47433] Re: <=>の意味は? — 藤川浩明 <fhir0aki3@...> 2010/09/18

 色々返答したいと思いましたが、時間が無いので「OOPの何がいいのか、いまいち分かっておりません。」の部分にのみ解答させていただきます。

[#47435] Re: <=>の意味は? — "T.Soejima" <clev@...2.so-net.ne.jp> 2010/09/18

そえじま@勉強中です。

[#47438] Re: <=>の意味は? — masayoshi takahashi <maki@...> 2010/09/18

高橋征義です。『たのしいRuby』の著者の片割れの方から来ました。

[ruby-list:47377] Re: cgiのパラメータについて

From: Fujioka <fuj@...>
Date: 2010-09-07 12:08:16 UTC
List: ruby-list #47377
藤岡です。

>> 作ったのが私じゃないので確定はできないのですが、
>> バグでしょうね。以下のパッチでなおります。
>>
>> echo "date=20100907" | ruby-1.8.7-p302 -rcgi -e 'p CGI.new["date"][4,2]'
>> "09"
> 
>  まあ、直ることは直りますが、そもそもプログラマーの意図を正確に
> 図ることが難しいので、ちゃんと動いてしまうと逆に危うい気もします。
> cgi["date"][4..5] と cgi["date"][4,2] の結果は違うわけですよね。
> 
>  1.8でも1.9でも警告が出ず同じ結果を得られる方法を推奨する方向に
> 持っていけないでしょうか。
> 
とりあえず、[]のオプションがIntegerを継承している場合だけ
warningを出して、親切に値を返すようにしてみました。
cgi["date"]が配列を返すのは1.6までで、1.8からはStringを
返すようになったのが仕様だと思います。
多分、移行を促すようにwarningを出すように細工をしたと思うので、
1.8ではwarningを出すというのがいいんじゃないかと思います。
1.8.7あたりからは1.9への移行の準備という意味合いもありますので、
warningを出す仕組みを削ってしまうのも手ではありますが。

% echo "date=20100907" | ruby-1.8.7-p302 -rcgi -e 'p CGI.new["date"][0]'
-e:1:CAUTION! cgi['key'] == cgi.params['key'][0]; if want Array, use
cgi.params['key']
"20100907"
% echo "date=20100907" | ruby-1.8.7-p302 -rcgi -e 'p CGI.new["date"][1]'
-e:1:CAUTION! cgi['key'] == cgi.params['key'][0]; if want Array, use
cgi.params['key']
nil
% echo "date=20100907" | ruby-1.8.7-p302 -rcgi -e 'p CGI.new["date"][4..5]'
"09"
% echo "date=20100907" | ruby-1.8.7-p302 -rcgi -e 'p CGI.new["date"][4,2]'
"09"

diff --git a/cgi.rb b/cgi.rb
index 1b263d4..86d1ebf 100644
--- a/cgi.rb
+++ b/cgi.rb
@@ -1149,11 +1149,11 @@ class CGI
         @params = params
       end
       def [](idx, *args)
-        if args.size == 0
+        if args.size == 0 && idx.is_a?(Integer)
           warn "#{caller(1)[0]}:CAUTION! cgi['key'] ==
cgi.params['key'][0]; if want Array, use cgi.params['key']"
           @params[idx]
         else
-          super[idx,*args]
+          super
         end
       end
       def first

# あちゃー、lastがlastになっていないというのも見つけちゃった。
# どうすっか。。。

In This Thread