为什么非显式splat参数加上默认参数是Ruby 1.9中方法定义的错误语法?

我想问一下为什么在Ruby-1.9.3-p0中有一个splat param1和一个带有默认值赋值的param2,如下所示:

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

回报

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

我的解决方法明确地将param1包装在括号中,如下所示:

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

非常感谢

在splat之后,Ruby无法使用默认值解析参数。 如果你在splat之后的参数中有默认赋值,那么Ruby如何知道将变量赋给什么?

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

假设我然后调用my_method:

 my_method(1, 2, 3) 

Ruby无法知道b是否缺失,在这种情况下你希望b是foo而a是[1,2,3],或者如果b存在,在这种情况下你希望它是3。