[#46838] メーリング;;文字化け::iso-2022-jp-2 — "前川 映一" <eiichi_maekawa@...>
10 messages
2010/02/02
[#46841] Re: メーリング;;文字化け::iso-2022-jp-2
— Kunimi Ikeda <kunimi.ikeda@...>
2010/02/02
いけだと申します。
[#46842] Re: メーリング;;文字化け::iso-2022-jp-2
— eiichi_maekawa@...
2010/02/02
[#46850] irbでrequireできるがrubyコマンドだとできない — 竹内 英樹 <hideki.takeuchi@...>
=1B$BC]Fb$H?=3D$7$^$9!#=1B(B
5 messages
2010/02/06
[ruby-list:46866] Re: []= メソッドの第一引数を省略したい
From:
西 啓一朗 <receiver@...>
Date:
2010-02-18 23:05:07 UTC
List:
ruby-list #46866
ちょっとだけツッコミ
> 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]
arr[0] = nil # => 0
arr #=> [1, 2, 0]
と意図しない動作になると思います。
デフォルト値ではなく可変長引数を使って
def []=(key, *val)
if val.empty?
self.push key
else
super(key, *val)
end
end
とした方が良いと思います。
> ここの部分はちょっと不思議ですね。
> てっきり key.nil? を見るべきだと思っていたので。
> このような仕様にした意図が気になるところです。
メソッドの呼び出しに置き換えてみればわかりやすいかと。
値が省略されるというのは文字通り「何も書かない」以外では表記できません。
arr[3] = "test" # => arr.[]=(3, "test")
arr[nil] = 12 #=> arr.[]=(nil, "test")
arr[] = 5 #=> arr.[]=(5)
--
西 啓一朗 <ktouth@k-brand.gr.jp>