2008-10-10 14 views
14

Ruby hat eine Fülle von bedingten Konstrukten, einschließlich if/unless, while/until usw.Hat Ruby eine eingebaute ... while?

while Der Block von C:

while (condition) { 
    ... 
} 

Ruby direkt übersetzt werden kann:

while condition 
    ... 
end 

Allerdings kann ich nicht finden eingebaute Entsprechung in Ruby für

Irgendwelche Vorschläge
do { 
    ... 
} while (condition); 

: ein C-ähnliche do ... while Block, in dem der Blockinhalt mindestens einmal ausgeführt?

+0

möglich Duplikat in Versionen entfernt wird [Gibt es eine "do ... while" Schleife in Ruby?] (http://stackoverflow.com/questions/136793/is-there-a-do-while-loop-in-ruby) –

+0

Siehe auch: http://stackoverflow.com/questions/136793/is -there-a-do-while-Schleife-in-Ruby – AndrewR

Antwort

30

... Das Beste, was ich tun konnte die loop mit einem break am Ende konstruieren ist: kann

loop do 
    ... 
    break unless condition 
end 
+4

Ja, das ist der Ansatz, den Matz empfohlen hat. siehe http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-core/6745 –

+0

@Siwei Netter Fang. Ich ändere die angenommene Antwort. –

-3

Sie

while condition 
    ... 
end 
+0

während der Zustand ist nicht das gleiche wie während der Bedingung. in dem Fall wird der Code mindestens einmal ausgeführt. –

+1

Der Punkt der Frage war, dass es offensichtlich ist, wie man eine 'while (Bedingung) {...}' tut, aber nicht so offensichtlich, wie man eine 'do {...} while (Bedingung)' macht, die das Innere ausführt mindestens einmal blockieren, egal was passiert. –

12

Sie

tun können, verwenden
i=1 
begin 
    ... 
    i+=1 
end until 10==x 

(Sie können auch auf eine while-Klausel an das Ende von beginnen .. Ende)

p 128 von Flanagan/Matz Ruby-Prog'g Lang Buch sehen: Das ist etwas, das nach 1,8

+0

Das wäre die direkte Übersetzung von do ... während von C. Es ist Matz Kommentar, der mich ein bisschen nervös macht über diese –

+0

Ich denke, ich sollte in 1.9 in ubuntu und OS X zu testen, ist es nicht schwer http: //blog.michaelgreenly.com/2007/12/multiple-ruby-version-on-ubuntu.html –

6
number=3 
begin 
puts number 
number-=1 
end while number>0 
Verwandte Themen