【发布时间】:2016-07-17 07:33:48
【问题描述】:
我有以下两种使用return和puts的方法。
方法一:
def method array
array.each do |n|
v = n * n
return n if v.even?
end
end
puts method [1, 2, 3, 4] #=> 2
方法二:
def method array
array.each do |n|
v = n * n
puts n if v.even?
end
end
method [1, 2, 3, 4] #=> 2, 4
是什么让第一个方法返回第一个满足条件的项目 (2),而不是返回第二个 (4)?
【问题讨论】:
-
不是一个理想的例子,因为
v是偶数,当且仅当n是偶数。 :-) -
puts不返回任何内容。它将东西放入 STDOUT -
方法 1 返回
2。方法 2 打印2,然后打印4,并返回nil。您混淆了打印的内容和返回的内容。 -
return 也破坏了 each 和方法
method的整个迭代,这就是它总共产生 2 的原因。在 (2) 中,如果是偶数则执行 puts,但它不会中断迭代。我建议您阅读有关关键字return、next、continue和break的内容,以了解 ruby 的概念,尤其是与块有关的内容。 -
@JanDvorak 我很确定每个 Ruby 表达式都会返回一些东西。
puts返回零。