在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
答案 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 do
与while $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