为什么 Ruby 有时会在调用带有括号前的 space 的函数时抛出错误?

Why does Ruby sometimes throw an error when a function is called with a space before the parentheses?

我学到的方法 Ruby 是,带括号和不带括号的函数语法都是可以接受的。为什么有些 Ruby 口译员特别想要一个而不是另一个?

def foo(i)
    puts "=" * i.length
    puts i 
    puts "=" * i.length
end

foo "hello" 

=begin
=====
hello
=====
=end

foo ("hello") 
# sometimes ERROR

使用 Ruby 2.6.3 当 运行 和 ruby -w 时,我收到以下警告。

test.rb:1: warning: parentheses after method name is interpreted as an argument list, not a decomposed argument

这是指 Array Decomposition,您可以在其中将数组参数的元素解压缩到各个变量中。

def bar((a,b))
  puts "a: #{a}, b: #{b}"
end

# a: first, b: second
bar ['first', 'second', 'third']

def foo (i) 怎么了? def foo i是合法的; parenthesis around the arguments are optional。但是 def foo (i) 是模棱两可的。可以解释为单个参数def foo(i)或数组分解def foo((i)).

因为这是模棱两可的,不同的口译员可能有不同的...解释。