为什么 `for i in a` 不是惯用的 Ruby?

Why is `for i in a` not idiomatic Ruby?

Ruby 支持 for i in a 语法,但没有人真正使用它。 Ruby的设计原则之一就是可读性,我发现

for i in a
  ...
end

更易读(也更容易输入)
a.each do |i|
  ...
end

为什么不是首选?其他人不也觉得它更具可读性吗?是否出于一致性原因,例如与 each_with_index 和变量作用域等其他函数的关系?

对我来说,这是统一的语法。当我要对数组 a 做一些事情时,我只是开始输入 a.。我要做什么?筛选? a.select;确定尺寸? a.size。迭代? a.each

迭代数组没什么特别的,不需要特殊的语言结构。此外 each没有直接块会导致枚举器,它可以与其他方法链接。

然后,Ruby 确实有一个很好的 for i in a 循环。因此,如果您更习惯使用 for 循环:无论如何,请使用 for 循环。

因为for循环更少objective并且使用更受限制。

从 OOP 的角度来看,迭代对象元素的可能性是该对象的 property/characteristic。使用全局函数或关键字的显式 "outer" 方式会发现冗余、不一致且更少 objective(封装)。

for 也更受限制,它只允许遍历对象元素。另一方面,Enumerator#each 可以让您获得更多。您可以使用枚举器对象,例如在值解包之前与其他方法链接、传递命名块、转换为 proc 的方法等。