当object.next到达结尾时如何指向第一个元素?

时间:2013-09-06 06:05:33

标签: ruby

从数组a创建枚举对象。当.first到达终点时,是否有任何方法指向.next

a = [5,1]
b = a.to_enum

b.next #=> 5
b.next #=> 1
b.next #=> Stop Iteration: Iteration reached an end. 

是否可以指向第一个元素,以便我可以再次使用next或指向上一个元素或循环?

b.prev #=> undefined method
b.previous #=> undefined method

3 个答案:

答案 0 :(得分:4)

您可以使用cycle

b.cycle(2) {|x| puts x} 

#=> 5
#=> 1
#=> 5
#=> 1

如果要永久运行它,请不要将参数传递给循环。您可以直接在数组对象上调用它,即a

答案 1 :(得分:3)

b = a.to_enum.cycle

请参阅循环文档:

http://ruby-doc.org/core-2.0.0/Enumerable.html#method-i-cycle

答案 2 :(得分:1)

使用Enumeration#rewind

a = [5, 1]
b = a.to_enum
b.next
# 5
b.next
# 1
b.next
# StopIteration: iteration reached at end
b.rewind
b.next
# 5
# etc