为什么这段代码在ruby 1.8而不是ruby 1.9中有用?

Ama*_*pta 6 ruby compatibility ruby-1.9 ruby-1.8

这段代码:

def func *; end
[func "hello"]
Run Code Online (Sandbox Code Playgroud)

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

syntax error, unexpected ']', expecting '}'
Run Code Online (Sandbox Code Playgroud)

在Ruby> = 1.9.我查看了Ruby 1.8和Ruby 1.9之间的区别,但找不到对此的引用.有谁知道造成这种变化的原因是什么?

Ste*_*fan 5

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

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

[foo 1, 2]
Run Code Online (Sandbox Code Playgroud)

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

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

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

在许多情况下,在发送消息时不需要括号...但是,必须使用括号来避免歧义.