2015-08-19 3 views
3

В Ruby есть петли, которые, как представляется, делают то же самое, что и друг другу, , а и до.В чем разница между циклами while и while в рубине?

Какая ситуация может использоваться одна над другой и почему у Ruby есть две петли, которые, похоже, делают то же самое?

, а синтаксис петли следующим образом:

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

* «Производит как тот же выход» * - нет – Stefan

ответ

5

рубин позволяет использовать несколько способов сделать то же самое, так что код может читать, естественно, в зависимости от того, что звучит лучше для вас и код, который вы пишут. Иногда условный работает лучше в положительных, например something_is_happening? против негативного something_is_done

и while работ пока что-то положительное продолжает быть положительным, в то время как until продолжает цикл, пока что-то негативное происходит.

например

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

против

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 

Это происходит потому, что, когда рубин интерпретирует «является $i < $num еще» это оценивается как истина, а затем сразу же останавливается.

Смежные вопросы