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

From: from_kyushu <from.kyushu.island@...>
Date: 2010-02-17 18:36:33 UTC
List: ruby-list #46864
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]
--------------------

from_kyushu

In This Thread