Ruby on rails 3 REE 1.8.7-2011.03是“枚举器”,保证以与“可枚举”相同的顺序将元素返回给a`

Ruby on rails 3 REE 1.8.7-2011.03是“枚举器”,保证以与“可枚举”相同的顺序将元素返回给a`,ruby-on-rails-3,activerecord,ruby-enterprise-edition,Ruby On Rails 3,Activerecord,Ruby Enterprise Edition,我遇到了一个问题,来自ActiveRecord关联的记录以我意想不到的顺序返回。这很容易修复,但是一些已经在生产中的代码假定了某种顺序,而这种顺序在我的例子中很重要——事实上,它是关键的 我已经缩小了解决这个基本问题的旧方法:如果“Enumerable#each”保证返回一个关联上的ActiveRecord记录的一致顺序,那么至少我知道我正在处理一个不断被打破的假设,这是可以修复的。如果不能保证,我可能会被用软管冲洗 所以我的问题是,在Ruby Enterprise Edition 2011.0

我遇到了一个问题,来自ActiveRecord关联的记录以我意想不到的顺序返回。这很容易修复,但是一些已经在生产中的代码假定了某种顺序,而这种顺序在我的例子中很重要——事实上,它是关键的

我已经缩小了解决这个基本问题的旧方法:如果“Enumerable#each”保证返回一个关联上的ActiveRecord记录的一致顺序,那么至少我知道我正在处理一个不断被打破的假设,这是可以修复的。如果不能保证,我可能会被用软管冲洗

所以我的问题是,在Ruby Enterprise Edition 2011.03版中,
Enumerable#each
方法是否会以与调用
Enumerable#to_a
相同的顺序返回Enumerable中的元素(在
对象上定义的函数)


我已经从github下载了REE代码,并检查了这个版本的标签(我已经验证了我在开发、登台和生产环境中使用的是相同的Ruby版本).问题是我不太会读C,所以我只能说我很有信心顺序是一样的,但我的C阅读技能不是很好。

是的,这是有保证的;
\u a
有效地收集
每个
的结果并以新数组返回它们

enum_to_a创建一个新数组,然后将
collect_all
作为块参数调用到它自己的
每个
collect_all
只执行
rb_ary_push(ari,i);
,将给定值推送到创建的数组上。在Ruby中,这是:

array = []
enum.each {|v| array.push v }
希望有帮助