1个括号:
print ( (1..10).collect do |x| x**2 end )
SyntaxError: compile error
更多详情:
(irb):1: syntax error, unexpected kDO_BLOCK, expecting ')'
print ( (1..10).collect do |x| x**2 end )
^
(irb):1: syntax error, unexpected kEND, expecting $end
print ( (1..10).collect do |x| x**2 end )
^
2个括号:
print (( (1..10).collect do |x| x**2 end ))
149162536496481100=> nil
我理解print (a) do <...>
和print(a) do <...>
之间的区别。但是我的情况有什么不同?为什么两个括号不一样?
答案 0 :(得分:1)
添加额外括号“起作用”的原因是因为嵌套括号为最内层表达式提供了更高的优先级。这消除了解析器的标记的歧义,并允许将语句正确地计算为表达式而不是方法参数。
它与关键字的绑定优先级有关。大括号的优先级高于do / end关键字,因此可以使用:
print ( (1..10).collect { |x| x**2 } )
因为它将括号表达式解释为表达式边界,而不是将方法参数绑定。
你也可以这样做:
print( (1..10).collect do |x| x**2 end )
因为这里的括号绑定了一个参数,而不是将表达式分开。
答案 1 :(得分:0)
使用此:
print((1..10).collect do |x| x**2 end)
更好的是:
print((1..10).collect do |x|; x**2; end)
始终删除方法名称和括号之间的空格。它是ruby解释器的语法分析之一。如果你同时放置空格和括号,ruby有时无法正确解释。
当您在一行中放置单独的代码行时,请使用;
分隔(因为端块应该放在单独的行中)