2008-10-10 2 views
14

Ruby a une multitude de constructions conditionnelles, y compris if/unless, while/until etc.Est-ce que Ruby a un built-in do ... while?

Le bloc while de C:

while (condition) { 
    ... 
} 

peut être traduit directement à Ruby:

while condition 
    ... 
end 

Cependant, je ne peux pas sembler trouver un intégré équivalent en Ruby pour un bloc C comme do ... while dans lequel le contenu du bloc sont exécutées au moins une fois:

do { 
    ... 
} while (condition); 

Toutes les suggestions?

+0

double possible de [Y at-il un "do ... while" dans Ruby?] (http://stackoverflow.com/questions/136793/is-there-a-do-while-loop-in-ruby) –

+0

Voir aussi: http://stackoverflow.com/questions/136793/is -there-a-do-while-loop-in-ruby – AndrewR

Répondre

30

... Le mieux que je pouvais venir avec est le loop construire avec un break à la fin:

loop do 
    ... 
    break unless condition 
end 
+4

Oui, c'est l'approche que Matz a recommandée. voir http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-core/6745 –

+0

@Siwei Belle prise. Je change la réponse acceptée. –

-3

Vous pouvez utiliser

while condition 
    ... 
end 
+0

alors que la condition n'est pas la même que lorsque la condition est remplie. Dans le cas do while, le code est exécuté au moins une fois. –

+1

Le point de la question était qu'il est évident de faire un 'while (condition) {...}' mais pas si évident comment faire un 'do {...} while (condition)', qui exécute l'intérieur bloquer au moins une fois, peu importe quoi. –

12

Vous pouvez faire

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

(vous pouvez aussi ajouter une clause while à la fin de début..end)

voir p 128 de Flanagan/Matz Ruby Prog'g livre Lang: C'est quelque chose qui peut être retiré dans les versions après 1,8

+0

Ce serait la traduction directe de do ... tandis que de C. C'est le commentaire de Matz qui me rend un peu nerveux d'utiliser ce –

+0

Je pense que je devrais commencer à tester en 1.9 dans Ubuntu et OS X, ce n'est pas difficile http: //blog.michaelgreenly.com/2007/12/multiple-ruby-version-on-ubuntu.html –

6
number=3 
begin 
puts number 
number-=1 
end while number>0 
Questions connexes