我希望能够从具有嵌套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循环。
任何帮助将不胜感激。非常感谢。
答案 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
逻辑。