2012-02-06 3 views
4

私は以下のようにスプラットのparam1とRuby-1.9.3-P0のデフォルト値の割り当てとPARAM2を持つ理由をお願いしたいと思います:Ruby 1.9で非明示的なsplat paramとdefault paramがメソッド定義の構文が間違っているのはなぜですか?

def my_method(*param1, param2 = "default"); end

戻り

SyntaxError: (irb):1: syntax error, unexpected '=', expecting ')'

私の回避策は、明示的にparam1を次のように角括弧で囲みます。

def my_method((*param1), param2 = "default"); end

多くのありがとう

+0

Marcが正しく、実際には動作しません。 'o.my_method(1、2、3)'を試して、何が起こるか見てみましょう。 –

答えて

7

Rubyはスプラット後にデフォルトでパラメータを解析できません。スプラット後のパラメータにデフォルトの割り当てがある場合、Rubyは変数をどのように割り当てるかをどのように知っていますか? [1,2,3を使用すると、Bがfooになりたい、その場合には、

my_method(1, 2, 3) 

RubyはBが欠落しているかどうかを知る方法がないとAは次のとおりです。

def my_method(*a, b = "foo"); end 

のは、私はその後、my_method呼んで言ってみましょう]、またはbが存在する場合は3にします。

関連する問題