这段代码:
def func *; end
[func "hello"]
在Ruby 1.8.7中解析时没有错误,但返回语法错误:
syntax error, unexpected ']', expecting '}'
Ruby中的> = 1.9。我浏览了What is the difference between Ruby 1.8 and Ruby 1.9,但找不到对此的引用。有谁知道造成这种变化的原因是什么?
答案 0 :(得分:5)
这是为了避免含糊不清。请考虑以下事项:
def foo(a, b = 1) # foo takes an optional second argument
end
[foo 1, 2]
这可以解释为[(foo 1), 2]
或[(foo 1, 2)]
。
Calling Methods文档中有两个引用(尽管与数组文字没有直接关系):
请注意,括号是可选的...除非使用和省略括号
之间存在差异在许多情况下,在发送消息时不需要括号......但是,必须使用括号来避免歧义。