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

Sap*_*ick -1 ruby syntax function parentheses

我学习 Ruby 的方式是带括号和不带括号的函数语法都是可以接受的。为什么一些 Ruby 解释器特别想要一个而不是另一个?

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

foo "hello" 

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

foo ("hello") 
# sometimes ERROR

Run Code Online (Sandbox Code Playgroud)

Sch*_*ern 5

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

test.rb:1: 警告:方法名后面的括号被解释为参数列表,而不是分解的参数

这是指数组分解,您可以在其中将数组参数的元素解包为单个变量。

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

# a: first, b: second
bar ['first', 'second', 'third']
Run Code Online (Sandbox Code Playgroud)

怎么了def foo (i)def foo i是合法的;参数周围的括号是可选的。然而def foo (i)是模棱两可的。它可以解释为单个参数def foo(i)或数组分解def foo((i))

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