为什么 `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 的方法等。
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 的方法等。