Ruby 循环迭代-检查是否未生成任何项

Ruby 循环迭代-检查是否未生成任何项,ruby,Ruby,我有一个函数,它只产生很少的项。我正在使用 my_function() do |item| ... some code here ... end 有没有一种很酷的方法来检查迭代器是否返回任何项?比如: my_function() do |item| ... some code here ... else puts "No items found" end 通常迭代的函数返回被迭代的可枚举项(例如数组)。如果执行此操作,则可以测试此返回值是否为空: if my_function()

我有一个函数,它只产生很少的项。我正在使用

my_function() do |item|
  ... some code here ...
end
有没有一种很酷的方法来检查迭代器是否返回任何项?比如:

my_function() do |item|
  ... some code here ...
else
  puts "No items found"
end

通常迭代的函数返回被迭代的可枚举项(例如数组)。如果执行此操作,则可以测试此返回值是否为空:

if my_function(){ |item| … }.empty?
  puts "nothing found!"
end
当然,如果您的块位于多行上,那么将其写为:

items = my_function() do |item|
  # …
end
puts "Nothing found!" if items.empty?

如果创建迭代的可枚举项不容易或效率不高,则只需修改函数以在末尾返回一个布尔值,指示是否迭代了任何内容。

您可以将迭代的返回值指定给变量,然后将其与任何内容进行比较

result = myfunction() do |item|
  # some code here ...
end
if result.empty?
  puts "Something"
end

可能是@sawa的重复,尽管这个问题在Haml中执行操作时非常困难,某些构造无法使用。这是正确的方法。这和我对你的回答是一样的。我想知道为什么我得到了两张反对票,而这个答案得到了三张赞成票(包括我的一张)。