ruby中while和until循环之间有什么区别?

时间:2015-08-19 00:31:26

标签: ruby loops while-loop

在Ruby中,循环似乎与彼此完全相同, while 直到循环。

使用一个而不是另一个会有什么情况,为什么Ruby有两个似乎做同样事情的循环?

while循环语法如下:

while conditional [do]
   code
end

直到语法:

until conditional [do]
   code
end

为了尽可能清楚地说明这一点:

$i = 0
$num = 5

while $i < $num  do
   puts("Inside the loop i = #$i" )
   $i +=1
end

$i = 0
$num = 5

until $i < $num  do
   puts("Inside the loop i = #$i" )
   $i +=1;
end

将产生相同的输出:

Inside the loop i = 0
Inside the loop i = 1
Inside the loop i = 2
Inside the loop i = 3
Inside the loop i = 4

2 个答案:

答案 0 :(得分:6)

ruby​​允许多种方式完成相同的操作,因此代码可以自然地读取,具体取决于您和您正在编写的代码更好的声音。有时,条件在积极方面效果更好,例如something_is_happening?与否定something_is_done

while有效,而积极的东西仍然是积极的,而until会继续循环,直到出现负面情况。

例如

while 'yes' == keep_going do
   keep_going = get_answer
end

VS

until 'stop' == answer do
   answer = get_answer
end

另外我注意到你实际上没有尝试在irb中运行你的两个循环...我知道这是因为第二个的输出肯定与第一个不一样。

2.1.2 :008 > $i = 0
 => 0 
2.1.2 :009 > $num = 5
 => 5 
2.1.2 :010 > 
2.1.2 :011 >   until $i < $num  do
2.1.2 :012 >        puts("Inside the loop i = #$i" )
2.1.2 :013?>      $i +=1;
2.1.2 :014 >     end
 => nil 

这是因为当ruby解释“is $i < $num”时,它的计算结果为true,然后立即停止。

答案 1 :(得分:0)

until也可用于获得与while相同的结果。

在这种情况下,until $i >= $num dowhile $i < $num的作用类似

2.4.0 :002 > $i = 0
 => 0 
2.4.0 :003 > $num = 5
 => 5 
2.4.0 :004 > until $i >= $num do
2.4.0 :005 >     puts("Inside the loop i = #$i")
2.4.0 :006?>   $i += 1 
2.4.0 :007?>   end
相关问题