在块中添加多个放置

时间:2014-12-17 03:28:24

标签: ruby

这2的区别是什么?为什么一个有效,另一个没有?

array.each{ |item| puts "The item is #{item}" puts item + 1 }

array.each do |item|
  puts "The item is #{item}"
  puts item + 1
end

3 个答案:

答案 0 :(得分:5)

如果您在一行中有两个语句,则需要在两者之间放置;。因此:puts "The item is #{item}"; puts item + 1

答案 1 :(得分:2)

你试图填写两个表达式,其中只有一个是预期的。您可以使用分号分隔两个表达式:

array.each { |item| puts "The item is #{item}"; puts item + 1 }

为什么不将"The item is #{item}"item + 1同时提供给puts

array.each { |item| puts "The item is #{item}", item + 1 }

答案 2 :(得分:0)

array.each{ |item| puts "The item is #{item}" puts item + 1 }

这只是一个语法错误,如解释器所述:

syntax error, unexpected tIDENTIFIER, expecting '}'

您的第二个示例在语法上是正确的,因此不会引发错误。

array.each do |item|
  puts "The item is #{item}"
  puts item + 1
end

each方法调用之后,在第一个{之前,你错过了一个空格,这可能是一个坏习惯。

此外,您可以将第一个示例设为:

array.each {|item| puts "The item is #{item}"
  puts item + 1 }

由于新行,它会在语法上变得正确。没有什么说每个给出的块的花括号形式必须写在一行上,尽管这是一个常见的约定。

但是对于风格,(我知道这不是Code Review),我可能会尝试保持代码的一致性。

array.each do |item|
  puts "The item is #{item}\n#{item.next}"
end

或者也许是花括号:

array.each do { |item| puts "The item is #{item}\n#{item.next}" }