这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
答案 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}" }