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)
使用 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))
。
因为这是模棱两可的,不同的解释器可能有不同的......解释。