如何从嵌套每个块的循环中断

时间:2015-01-22 02:58:32

标签: ruby

我希望能够从具有嵌套while块的each循环中逃脱。

在下面的示例方法中:

@client代表API客户端。

#recommended_photos是一个API调用,它返回20个推荐(不喜欢)照片的数组。在后续的API调用中,此数组可以填充新推荐的照片,直到所有照片都被喜欢。

def like_recommended_photos(limit = nil)
  liked_photos_count = 0
  recommended_photos = @client.recommended_photos
  while recommended_photos
    recommended_photos.each do |photo|
      @client.like photo
      liked_photos_count += 1
      break if limit == liked_photos_count
    end
    recommended_photos = @client.recommended_photos
  end
end

我想要做的是可选择设置一个受限照片数量限制。

因此,如果我拨打liked_recommended_photos(5),我只想要5张照片。然而,这最终会喜欢所有可能的照片,我无法弄清楚如何正确地停止while循环。

任何帮助将不胜感激。非常感谢。

1 个答案:

答案 0 :(得分:0)

你最好的选择是彻底消除嵌套循环。我假设你已经完成了这项工作,因为recommended_photos可能是零?

如果是这样,你可以尝试这样的事情:

def like_recommended_photos(limit = nil)
  liked_photos_count = 0
  recommended_photos = @client.recommended_photos || []
  recommended_photos.each do |photo|
    @client.like photo
    liked_photos_count += 1
    break if limit == liked_photos_count
  end
  recommended_photos = @client.recommended_photos
end

那样recommended_photos永远不会为零,循环将在一个空数组上运行(并且不做任何结果),这样你就可以避免凌乱的catch / throw逻辑。