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

时间:2010-02-12 07:49:34

标签: ruby programming-languages syntax

  

可能重复:
  Using do block vs brackets {}
  What is the difference or value of these block coding styles in Ruby?

为什么:

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

工作,但不是:

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

然而这很有效:

puts test = [1, 1, 1].collect { |te|
    te + 10
}

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

1 个答案:

答案 0 :(得分: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
})