vvc*_*vch 4 ruby iterator for-loop enumerator
我在某些序列中间有一个枚举器:
enum = (1..9).each
first = enum.next
second = enum.next
Run Code Online (Sandbox Code Playgroud)
现在,我要遍历序列的其余部分(3..9个数字)。但是看似显而易见的解决方案(例如在python中工作)从序列的开头而不是第三项重新开始:
for item in enum
puts item
end
# prints 1..9 instead of 3..9
Run Code Online (Sandbox Code Playgroud)
我发现工作解决方案似乎很丑陋:
begin
while item=enum.next
puts item
end
rescue StopIteration
end
Run Code Online (Sandbox Code Playgroud)
那么问题来了:是否有更好的红宝石解决方案可以做到这一点?为什么for在Ruby 中循环如此行?
为了直接回答您的问题,您当前的代码正确无误,但设计过度。您只需要做:
enum = (1..9).each
first = enum.next
second = enum.next
loop { puts enum.next }
Run Code Online (Sandbox Code Playgroud)
break枚举结束时,循环将立即结束;该loop自动救StopIteration你。仅当您在循环后enum.next 再次调用时才会重新引发,此处不会发生。
但是,正如@mudasobwa指出的那样,使用像这样的枚举非常普遍;更常见的是(1..9).each_with_index通过索引使用并显式处理第一个收益。