迭代一个范围

4

我需要从 1 循环到给定的数字 A。我使用以下代码实现:

(1..A).step(1) do |n| puts n end

有没有比这更好的方法?

我的默认步长将为1。


你的代码有什么问题? - sawa
只是试图重构以寻找更好的选择。 - Jagdsh L K
我投票关闭此问题,因为这个问题应该属于codereview.stackexchange.com。 - Ilya
1
如果你只想“打印”这些数字: puts *1..A - Stefan
1个回答

12

在这种情况下,更符合习惯(或者可以说更符合语言习惯)的方式是使用Integer#upto方法:

1.upto(A) { |n| puts n }

此外,step(1)是默认值,你可以直接迭代范围本身:

(1..A).each { |n| puts n }

或者,甚至使用Integer#times:

A.times { |n| puts n + 1 }

请注意,Integer#times0 开始计数,因此需要加上 +1

NB请注意下面@Stefan的非常有价值的评论。


6
值得注意的是,尽管它们产生相同的输出,但每个解决方案的返回值不同:分别为1,1..AA(因为它们都返回接收器)。 - Stefan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接