【发布时间】:2014-12-12 01:40:16
【问题描述】:
我个人喜欢在 Ruby 中使用 for 关键字进行迭代,因为在我看来它读起来非常干净。我一般假设for可能是Enumerable#each的别名,但不知道是否正确。在最基本的例子中:
for i in (1..10)
puts i
end
行为与
相同(1..10).each do |i|
puts i
end
只是没有创建一个新的变量范围。此外,ruby-doc 说
for循环在现代 ruby 程序中很少使用。
这让我觉得有一个特定的技术原因反对使用。没有新的变量范围有关系吗?以什么方式?
【问题讨论】:
-
查看ruby style guide 以获得解释和示例。
-
你的描述有点矛盾。一方面,您承认使用
for是您的个人喜好。然后,你写它是干净的从[任何]程序员的眼睛。毕竟,这只是你的个人意见。大多数了解 Ruby 的人更喜欢each而不是for并认为each在他们看来比for更干净。你似乎有一个奇怪的意见。 -
“从程序员的角度来看”。从你的程序员的角度来看。每种语言都有其惯用用法,如果您打算分享甚至公开您的代码,学习它们是件好事。虽然我们都有自己喜欢的说话方式,但知道如何用特定的口语正确说话很重要,用编程语言写作也是如此。 Ruby 样式指南是很好的起点。
-
我个人也更喜欢
for的外观,在Ruby 的早期,for表现更好。如今,自从each被更改后,它的性能似乎略有提高。for可能还应该进行修复以删除泄漏的本地变量,但这样做会破坏很多代码,不太可能发生。如果您想要 Ruby 2 中最快的迭代,while循环可能是要走的路(除了习语)。我个人避免使用基于惯用语的风格指南,而首先使用可维护和高性能的东西。我对for的问题不是它的外观,而是它的副作用。 -
@codenheim,我不认为变量泄漏是需要修复的错误。它的行为与
if和while等其他构造的行为一致。我相信这是设计使然。因此,我不认为它归结为美学和主观意见的简单问题。语义差异可能会派上用场,就像||和or的不同优先级一样。 Ruby 开发人员应该了解这两种形式。
标签: ruby for-loop coding-style each keyword