2012-12-11 51 views
0

我運行到哪裏正在以順序返回了一個ActiveRecord的關聯記錄的問題each`我沒有想到。這很容易解決未來,但是一些已經在生產中的代碼假定了一定的順序,而且這種順序在我的情況下很重要 - 事實上這很重要。REE 1.8.7-2011.03,是'枚舉#保證在相同的順序爲'可枚舉#返回元素to_a`

我已經縮小了解決這個基本問題的方法:如果「Enumerable#each」保證在關聯中返回一致的ActiveRecord記錄順序,那麼至少我知道我正在處理一直斷裂的假設,這是可以解決的。如果不能保證,那麼我可能會被洗淨。

所以我的問題是,在Ruby企業版,版本2011.03,莫非Enumerable#each方法返回可枚舉的元素以相同的順序,如果我會叫Enumerable#to_a(上Object

我定義一個函數下載從GitHub的REE代碼,並檢查出的標籤此版本(我已經驗證了,我用我的發展一樣Ruby版本,分期和生產環境)。麻煩的是我不是偉大的閱讀C,所以我只能說,我是非常有信心的順序是一樣的,但我的C閱讀能力並沒有那麼大

回答

1

是的,它保證; #to_a有效剛剛收集的#each結果,並在一個新的數組返回它們。

enum_to_a創建一個新數組,然後將collect_all作爲塊參數調用到它自己的eachcollect_all簡單地執行rb_ary_push(ary, i);,其推動給定值到所創建的陣列。在紅寶石,這將是:

array = [] 
enum.each {|v| array.push v } 

希望幫助!