[ruby-list:46865] Re: []= メソッドの第一引数を省略したい

From: Yuya Takeyama <sign.of.the.wolf.pentagram@...>
Date: 2010-02-18 16:04:17 UTC
List: ruby-list #46865
from_kyushu さん、こんにちは。
ご返答ありがとうございます。


(2010年02月18日 03:36), from_kyushu wrote:
> 引数が2つ以上あるメソッドで、1番目の引数だけにデフォルト値を設定することは出来ません。
> 2番目以降にもデフォルト値を設定するか、可変長引数を使う必要があったと思います。
> なのでこう書けば動きました。
>
> --------------------
> class MyArray < Array
>   def []=(key,val=nil)
>     if val.nil?
>       self.push(key)
>     else
>       super(key,val)
>     end
>   end
> end
>
> arr = MyArray.new
> arr[] = 1 # => 1
> arr[] = 2 # => 2
> arr # => [1, 2]
> --------------------
>
> from_kyushu
>   

なるほど!そういうことだったんですね。
オライリーの本で、確かにそういったことを読んだ覚えはありますが、
いざ書いてみると、自分の理解がまだまだなことを思い知らされますね・・・。

ですが、

>     if val.nil?
>       self.push(key)
>     else

ここの部分はちょっと不思議ですね。
てっきり key.nil? を見るべきだと思っていたので。
このような仕様にした意図が気になるところです。

軽い気持ちで質問したつもりが、思った以上に深かったようで、
これからの参考になりそうです。

どうもありがとうございました。

Yuya Takeyama


In This Thread