当我在ruby 2.3.1p112上运行它时:
def test(x, *y, z = 1)
puts x, y, z
end
我收到了这条消息:
(repl):1: syntax error, unexpected '=', expecting ')'
def test(x, *y, z = 1)
另一方面,当我改变参数y和z的位置时,它起作用。
def test(x, z = 1, *y)
puts x, y, z
end
为什么不能在sponge参数的右边使用这个可选参数?
注意:此问题与Optional argument after splat argument不同,因为该问题询问有关散列可选参数的问题,而此问题要求使用简单的非散列可选参数。当它是一个可选的散列参数时,无法知道分配给散列和sponge参数的参数数量。虽然,在可选参数不是哈希的情况下,将一个元素分配给可选参数并将其余元素分配给sponge参数是有意义的。
答案 0 :(得分:0)
Ruby不允许含糊不清。这些案例在语法上被排除在外。当你传递两个参数时,它如何知道第二个参数是否应该是y的一部分,z没有传递,或者y应该为空,z是第二个参数?