from_kyushuと申します。

On 2010/02/18, at 1:21, Yuya Takeyama wrote:

> 引数にデフォルト値を与えればいいのかと思い、以下のような変更を行いましたが、
> これもうまくいきませんでした。
> 
> def []=(key = nil, val)
> 
> これは Syntax Error となりました。
> 

引数が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]
--------------------