为什么我不能在海绵参数的右边使用默认参数?

时间:2016-07-10 00:29:05

标签: ruby

当我在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参数的右边使用这个可选参数?

实时代码:https://repl.it/CaXU/2

注意:此问题与Optional argument after splat argument不同,因为该问题询问有关散列可选参数的问题,而此问题要求使用简单的非散列可选参数。当它是一个可选的散列参数时,无法知道分配给散列和sponge参数的参数数量。虽然,在可选参数不是哈希的情况下,将一个元素分配给可选参数并将其余元素分配给sponge参数是有意义的。

1 个答案:

答案 0 :(得分:0)

Ruby不允许含糊不清。这些案例在语法上被排除在外。当你传递两个参数时,它如何知道第二个参数是否应该是y的一部分,z没有传递,或者y应该为空,z是第二个参数?