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

时间:2012-02-06 01:22:49

标签: ruby

我想问一下为什么在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

非常感谢

1 个答案:

答案 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>