除非循环,否则我有以下内容:
offset = 0
count = false
until count == 0
offset += 100
count = ThirdPartyApi.all(offset: offset)
# Do other things within the loop
end
它的作用基本上是来自ThirdPartyApi.all
的计数随着偏移量的增加而减少,一旦API调用中没有更多记录,就停止循环。
但整个街区感觉非常笨重。有没有办法重写,所以它更简洁?
答案 0 :(得分:2)
编辑:由于你想在循环中做其他的陈述,这里有一个建议:
offset = 0
begin
offset += 100
count = ThirdPartyApi.all(offset: offset)
# Do other things within the loop
end until count.zero?
这不会明显缩短,但是通过将测试置于循环的末尾,可以更清楚地表明它总是至少执行一次。这也使您不必初始化count
。
答案 1 :(得分:1)
假设您对count
没有任何其他用途,可以将其减少为:
offset = 0
offset += 100 until ThirdPartyApi.all(offset: offset) == 0
更新:上述版本与OP的原始帖子不同,因为
<statement> until <expression>
在第一次评估<expression>
之前不执行语句,与
begin
...
end until <expression>
在评估begin ... end
子句之前执行until
。 (请参阅http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-core/6745以获取matz关于此主题的有趣评论,由http://en.wikipedia.org/wiki/Ruby_(programming_language)引用。
鉴于修改后的问题表明OP希望在循环中执行额外的代码,除了@Matt的答案之外我没有什么可补充的(我要感谢他在原始答案中指出我的错误。)< / p>