2008-10-10 8 views
14

Ruby wiele konstruktów warunkowego, w tym if/unless, while/until itpCzy Ruby ma wbudowaną funkcję ... while?

while bloku z C:

while (condition) { 
    ... 
} 

może bezpośrednio ulec translacji Ruby

while condition 
    ... 
end 

Jednak nie mogę znaleźć wbudowanego odpowiednika w Ruby dla C-jak do ... while blok, w którym zawartość blokowe są wykonywane co najmniej raz:

do { 
    ... 
} while (condition); 

sugestie?

+0

możliwym duplikatu [Czy istnieje „do ... while” pętli w Ruby?] (http://stackoverflow.com/questions/136793/is-there-a-do-while-loop-in-ruby) –

+0

Zobacz także: http://stackoverflow.com/questions/136793/is -there-a-do-while-loop-in-ruby – AndrewR

Odpowiedz

30

... Najlepszym mogłem wymyślić jest loop skonstruować z break na koniec:

loop do 
    ... 
    break unless condition 
end 
+4

Tak, to jest podejście zalecane przez Matza. zobacz http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-core/6745 –

+0

@Swewei Nice catch. Zmieniam zaakceptowaną odpowiedź. –

-3

Można użyć

while condition 
    ... 
end 
+0

a warunek nie jest taki sam jak warunek while. w przypadku, gdy kod zostanie wykonany co najmniej raz. –

+1

Punktem pytania było to, że jest oczywiste, jak zrobić 'while (warunek) {...}' ale nie tak oczywiste, jak zrobić 'do {...} while (warunek)', który uruchamia wnętrze blokuj przynajmniej raz bez względu na wszystko. –

12

Można zrobić

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

(można również dodać klauzulę while na końcu begin..end)

patrz str 128 Flanagan/Matz Ruby Prog'g Lang książki: Jest to coś, co może być usunięte w wersjach po 1,8

+0

To byłoby bezpośrednie tłumaczenie do ... podczas gdy z C. To jest komentarz Matza, który sprawia, że ​​jestem nieco zdenerwowany z korzystania z tego –

+0

Myślę, że powinienem rozpocząć testowanie w 1.9 w Ubuntu i OS X, to nie jest trudne http: //blog.michaelgreenly.com/2007/12/multiple-ruby-version-on-ubuntu.html –

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