2014-04-01 89 views
0

我有關於ruby中循環的技術性深層問題。Ruby如何執行每個循環?

我有一個是順序執行的布爾值的陣列,並且在一個數據結構進行操作的算法。

def function(boolean, data_structure) 

關鍵的一點是,執行順序是最重要的事情,因爲表達

function(true, data_structure);function(true, data_structure); function(false, data_structure) 

將在數據結構中留下其他結果比表達

function(true, data_structure);function(false, data_structure); function(true, data_structure) 

我花了些時間每次循環,但我沒有如下

得到任何問題,因爲其他導致數據結構因執行類似的表達
[true, true, false ....].each do |value| function(value, data_structure) end 

我的問題:在默認配置紅寶石是我的每個迴路是同樣喜歡遵循循環?

for i in 0..array.size do function(array[i], data_structure) end 

因爲每個循環使代碼更清晰,更容易修改,我在想離開各自表達,而不是使用循環。 (當然在我的情況我有更多的代碼,而不是僅調用函數()..)

+0

是,'each'應該在迭代順序排列,同爲你的'for'循環。 –

+0

檢查的一種方法是「打印」循環中的值。即'[true,true,false]。每個值|打印(值)end' –

回答

2

是的,這是相同的。它將按順序遍歷數組的元素。

+0

事實上,'foo的在bar'是'bar.each只是語法糖做|富|' - 它的字面調用'each'幕後。 – Chuck

+0

@抓到,你能幫我解釋一下嗎?如果Ruby使用'each'來實現'for loops',它如何處理以下內容:'for i in [1,2,3] do if break if i == 2;結束;把「我=#{我}」? –

+0

@CarySwoveland:你說得對,那是一個區別,所以我猜「語法糖」有點過分。不過,它是用'each'實現的。只是在一種情況下,變量被解析爲塊參數(因此被限定爲塊),另一種方式是將其視爲方法的局部變量。如果你想親眼看看它使用'each',你可以做'Array.prepend(Module.new {def each()puts「Look ma,I'm called!」; super end})''。然後以任何你喜歡的方式迭代一個數組,你會得到「看,我叫!」如果它使用'each'。 – Chuck