我想问一下为什么在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
非常感谢
答案 0 :(得分:7)
Ruby在splat之后无法使用默认值解析参数。如果你在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。 / p>