2014-09-22 67 views
0

指定索引創建一個數組的循環,我從這樣的數組寫了一個循環的腳本:如何在紅寶石

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結尾。

我該如何寫這種情況下的循環代碼?

+1

它說的是,如果沒有塊是考慮到循環,它返回一個枚舉,而不是因此錯誤類型的文檔。 – squiguy 2014-09-22 02:11:26

回答

2

你可以使用rotate

a.rotate(new_index).cycle { ... } 

(注:我不認爲你需要的.each

2

rotate是正確的答案,但你的代碼是不工作的原因是因爲你試圖連接數組的最後一部分和a.cycle,這是一個Enumerator,可能不是你想要的。此外,如果您連接數組的其餘部分,則您的代碼將輸出[3, 4, 1, 2, 3, 4](如果您修復了其他部分),因爲您沒有切斷末尾。

試試這個(實際上,使用rotate像@lurker說,但這裏是如何解決你的原碼):

(a[index..-1] + a[0...index]).cycle {|i| p i; sleep 1} 
0

你可以做到這一點沒有Array#rotate。假設爲:

a = [1, 2, 3, 4] 

起始指數分別2

enum = a.cycle 
2.times { enum.next } 
enum.each { |i| p i; sleep 1 }