6

这段代码:

def func *; end
[func "hello"]

在 Ruby 1.8.7 中解析没有错误,但返回语法错误:

syntax error, unexpected ']', expecting '}'

在红宝石> = 1.9。我查看了What is the difference between Ruby 1.8 和 Ruby 1.9,但找不到对此的参考。有谁知道是什么变化导致了这种情况?

4

1 回答 1

5

这是为了避免歧义。考虑以下:

def foo(a, b = 1) # foo takes an optional second argument
end

[foo 1, 2]

这可以解释为[(foo 1), 2][(foo 1, 2)]

调用方法文档中有两个引用(尽管与数组文字没有直接关系):

请注意,括号是可选的......除非使用和省略括号之间存在差异

在许多情况下,发送消息时不需要括号......但是,为了避免歧义,括号是必要的。

于 2013-09-10T16:20:11.487 回答