什么是.each迭代器获取顺序保证?

时间:2015-10-28 00:10:14

标签: ruby

我真的感到困惑,因为它导致了几个小时的头部刮伤;我有以下代码段

objectA.arrayA.each do |p|
  do stuff with p
end

我认为这很好,因为从this question我觉得因为我正在使用阵列工作所以我应该没事。不幸的是,情况并非如此,因为每个迭代器返回元素的顺序并不总是相同的。经过几个小时的查看其他块以解决问题,使用for循环交换上面的代码解决了问题:

for i in 0...objectA.arrayA.length
  do stuff with the array element
end

任何人都知道每个人的订购保证

1 个答案:

答案 0 :(得分:1)

Enumerable

的文档
  

Enumerable mixin提供了几个集合类   遍历和搜索方法,并具有排序的能力。该   class必须提供一个方法,其中产生连续的成员   集合。如果使用了Enumerable#max,#min或#sort,则为对象   在集合中还必须实现一个有意义的< =>运营商,作为   这些方法依赖于集合成员之间的排序。

所以Array.each也必须让连续成员符合这份合同

如果某个实现没有强制执行此操作,那么这将是实现中的错误