Ruby do/end vs braces

Gra*_*dpa 20 ruby block

为什么这个地图表达式会产生不同的结果,具体取决于我是使用大括号还是执行/结束?

a = [1,2,3,4,5]


p a.map { |n|
    n*2
}  
#=> [2,4,6,8,10]


p a.map do |n|
    n*2
end  
#=> [1,2,3,4,5]
Run Code Online (Sandbox Code Playgroud)

Dar*_*ust 21

那是因为第二行被解释为:

p(a.map) do ... end
Run Code Online (Sandbox Code Playgroud)

代替:

p(a.map do ... end)
Run Code Online (Sandbox Code Playgroud)

在这种情况下,语法是模棱两可的,do似乎没有那么强烈{.