REE 1.8.7-2011.03,保证"Enumerator#each"以与"Enume



我遇到了一个问题,ActiveRecord关联中的记录以我意想不到的顺序返回。这很容易解决,但一些已经在生产中的代码假设有一定的顺序,而在我的情况下,这个顺序很重要——事实上这很关键。

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

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

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

是的,它是有保证的;CCD_ 4有效地只是收集CCD_。

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

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

希望能有所帮助!

相关内容

  • 没有找到相关文章

最新更新