2008-10-10 7 views
14

Ruby tiene una gran cantidad de construcciones condicionales, incluyendo if/unless, while/until etc.Ruby tiene una función incorporada ... ¿mientras?

El bloque while de C:

while (condition) { 
    ... 
} 

puede ser directamente traducidos a Ruby:

while condition 
    ... 
end 

Sin embargo, parece que no puedo encontrar un incorporado equivalente en Ruby para un do ... while bloque C-como en el que el contenido del bloque se ejecuta al menos una vez:

do { 
    ... 
} while (condition); 

alguna sugerencia?

+0

posible duplicado de [¿Hay un "do ... while" bucle en Ruby?] (http://stackoverflow.com/questions/136793/is-there-a-do-while-loop-in-ruby) –

+0

Ver también: http://stackoverflow.com/questions/136793/is -there-a-do-while-loop-in-ruby – AndrewR

Respuesta

30

... Lo mejor que podía llegar a es el loop construir con una break al final:

loop do 
    ... 
    break unless condition 
end 
+4

Sí, este es el enfoque que Matz recomienda. ver http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-core/6745 –

+0

@Siwei Buena captura. Estoy cambiando la respuesta aceptada. –

-3

Puede utilizar

while condition 
    ... 
end 
+0

mientras que la condición no es la misma que cuando está en condición. en el do while case el código se ejecuta al menos una vez. –

+1

El punto de la pregunta es que es obvio cómo hacer un 'while (condición) {...}' pero no tan obvio cómo hacer un 'do {...} while (condition)', que ejecuta el interior bloquear al menos una vez sin importar qué. –

12

Usted puede hacer

i=1 
begin 
    ... 
    i+=1 
end until 10==x 

(también puede virar en una cláusula while hasta el final de begin..end)

ver pág 128 del libro de Flanagan/Matz Rubí Prog'g Lang: Esto es algo que se puede retirar en las versiones posteriores a 1,8

+0

Esa sería la traducción directa de do ... mientras que de C. Es el comentario de Matz lo que me pone un poco nervioso al usar este –

+0

Creo que debería comenzar a probar en 1.9 en ubuntu y OS X, no es difícil http: //blog.michaelgreenly.com/2007/12/multiple-ruby-version-on-ubuntu.html –

6
number=3 
begin 
puts number 
number-=1 
end while number>0 
Cuestiones relacionadas