2012-01-19 44 views

回答

9

试试这个:

25.downto(0) { |i| puts i } 
24

方式一:

25.downto(0) do |i| 
    puts i 
end 
+0

我想你想出了范围可以不会像这样使用;-) –

+0

这是别人的回答,因为删除了。当这正是'downto'的目的时,我不会想到使用范围。 –

+0

对不起,那么。我被这个答案逗乐了,但是没有记住名字:-) –

49

有很多方法可以在Ruby中执行递减循环:

第一种方式:

for i in (10).downto(0) 
    puts i 
end 

方式二:

(10).downto(0) do |i| 
    puts i 
end 

第三条道路:

i=10; 
until i<0 
    puts i 
    i-=1 
end 
+3

第一种方式包含无关的parens,并不是很习惯。第二种方式也包含无关的parens,有一个不必要的'each',并且有不必要的引号和变量插值。第三种方式简单地被打破。 –

+0

@MarkThomas:我认为多余的括号是为了让新Ruby用户看起来更尴尬,就像我一样。在Javascript中,同样的事情是可能的,但你需要使用两个点(小数点和属性访问器):'65536..toExponential()'。这是允许访问属性的一种有些尴尬的方式,所以我想象至少在其他语言中使用或者甚至知道可能使用点直接访问数字属性的情况是不常见的。 –

12

downto是好的,但也有更多的通用step

25.step(0, -1){|i| puts i} 
1

万一你是一个范围已经工作:

rng = 0..6 
rng.reverse_each { |i| p i } 
2

这里有一个简单的办法:

(0..25).reverse_each { |i| print i } 
+0

不起作用,范围不会下降。 – steenslag

+0

@steenslag看起来你是对的。定影。 – edgerunner