我怎样才能从一个块早期返回一些东西?
如果我想要做这样的事情:
collection.each do |i| return nil if i == 3 ..many lines of code here.. end
我将如何得到这种效果? 我知道我可以用一个大的if语句将所有内容都包裹起来,但是如果可能的话,我想避免嵌套。
rest不会在这里工作,因为我不想停止迭代其余的元素。
next
一个块内部从块返回。 在一个块内部的break
返回从块产生的函数。 对于each
这意味着break
退出循环, next
跳转到循环的下一个迭代(因此名称)。 您可以使用next value
和break value
返回值。
#!/usr/bin/ruby collection = [1, 2, 3, 4, 5 ] stopped_at = collection.each do |i| break i if i == 3 puts "Processed #{i}" end puts "Stopped at and did not process #{stopped_at}"
在这种情况下,可以使用break来尽早终止循环:
collection.each do |i| break if i == 3 ...many lines end
…当然,这是假设你实际上并没有想要返回一个值,只是突破了块。