0

我遇到了一个问题,即来自 ActiveRecord 关联的记录以我没想到的顺序返回。这很容易解决,但是一些已经在生产中的代码假设有一定的顺序,而这个顺序对我来说很重要——事实上它很关键。

我已经缩小了将旧东西修复到这个基本问题的方法:如果保证“Enumerable#each”在关联上返回一致的 ActiveRecord 记录顺序,那么至少我知道我正在处理一个持续损坏的问题假设,这是可以修正的。如果不能保证,那么我可能会被冲洗掉。

所以我的问题是,在 Ruby Enterprise Edition,Release 2011.03 中,该Enumerable#each方法是否以与我调用相同的顺序返回 Enumerable 中的元素Enumerable#to_a(在Object

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

4

1 回答 1

1

是的,这是有保证的;#to_a实际上只是收集结果#each并将它们返回到一个新数组中。

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

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

希望有帮助!

于 2012-12-11T21:24:33.997 回答