基本的ruby问题:块的{} vs do/end构造

Did*_* A. 2 ruby syntax programming-languages

可能的重复:
使用do block vs bracket {}
Ruby中这些块编码样式的区别或价值是什么?

为什么:

test = [1, 1, 1].collect do |te|
    te + 10
end
puts test
Run Code Online (Sandbox Code Playgroud)

有效,但不是:

puts test = [1, 1, 1].collect do |te|
    te + 10
end
Run Code Online (Sandbox Code Playgroud)

然而这有效:

puts test = [1, 1, 1].collect { |te|
    te + 10
}
Run Code Online (Sandbox Code Playgroud)

对于我不知道的块,do/end构造和{}构造之间是否存在差异?

Chr*_*ung 10

在"不工作"的情况下,该块实际上附加到puts呼叫,而不是collect呼叫.{}绑定比...更紧密do.

下面的显式括号显示了Ruby解释上述语句的方式的不同之处:

puts(test = [1, 1, 1].collect) do |te|
    te + 10
end

puts test = ([1, 1, 1].collect {|te|
    te + 10
})
Run Code Online (Sandbox Code Playgroud)