[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