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

From: Yuya Takeyama <sign.of.the.wolf.pentagram@...>
Date: 2010-02-17 16:21:08 UTC
List: ruby-list #46863
こんにちは。竹山と申します。

[]= メソッドについて質問です。
PHP の、以下のような構文を Ruby で実現したいと思っています。

$arr[] = "zero";
// => array(0 => "zero");
$arr[] = "one";
// => array(0 => "zero", 1 => "one")

念のため説明すると、PHP では
$arr[] = "foo";
とすることで、配列 $arr の末尾に "foo" という要素が追加されます。

そこで、以下のようなコードを書いてみたのですが、うまくいきませんでした。
手元の Ruby のバージョンは 1.8.7 です。
(インデントに全角スペースを使っていることにご注意ください)

class MyArray < Array
 def []=(key, val)
  if key.nil?
   self.push(val)
  else
   super(key, val)
  end
 end
end

arr = MyArray.new
arr[] = "zero"
# => ArgumentError: wrong number of arguments (1 for 2)

引数にデフォルト値を与えればいいのかと思い、以下のような変更を行いましたが、
これもうまくいきませんでした。

def []=(key = nil, val)

これは Syntax Error となりました。

ちなみに、最初に書いたコードの MyArray を使って

arr[nil] = "zero"

というように書くと、末尾に要素が追加されていくのですが、
これではあまり意味が無いのは言うまでも無いと思います。

思いつきで書いてみただけなので、特に問題ではないのですが、
実現できないかと思っていますが、これは仕様上できないのでしょうか。

どなたかご返答いただければ幸いです。
以上、よろしくお願いします。

Yuya Takeyama

In This Thread

Prev Next