我从这样的数组中写了一个循环脚本:
a = [1, 2, 3, 4]
a.cycle.each{|i| p i; sleep 1}
我想从指定的索引开始循环。
index = 2
(a[index..-1] + a.cycle).each{|i| p i; sleep 1}
此代码最终会出现错误TypeError: no implicit conversion of Enumerator into Array
。
如何编写像这种情况的循环代码?
答案 0 :(得分:2)
您可以使用rotate
:
a.rotate(new_index).cycle { ... }
(注意:我认为您不需要.each
)
答案 1 :(得分:2)
rotate
是正确答案,但您的代码无法正常工作的原因是因为您尝试连接数组的最后一部分a.cycle
,这是{{1}可能不是你想要的。此外,您的代码将输出Enumerator
(如果您修复了另一部分),因为当您连接数组的其余部分时,您不会切断结束。
请尝试使用此功能(实际上,请使用[3, 4, 1, 2, 3, 4]
,例如@lurker说,但这里有解决原始代码的方法):
rotate
答案 2 :(得分:0)
你可以在没有Array#rotate的情况下完成。假设为:
a = [1, 2, 3, 4]
起始索引为2
:
enum = a.cycle
2.times { enum.next }
enum.each { |i| p i; sleep 1 }