ちょっとだけツッコミ > 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>