Ruby има ли вградено do while?

Ruby има изобилие от условни конструкции, включително if/unless, while/until и т.н.

Блокът while от C:

while (condition) {
    ...
}

може да се преведе директно на Ruby:

while condition 
    ...
end

Изглежда обаче не мога да намеря вграден еквивалент в Ruby за C-подобен do ... while блок, в който съдържанието на блока се изпълнява поне веднъж:

do { 
    ... 
} while (condition);

Някакви предположения?


person Cristian Diaconescu    schedule 10.10.2008    source източник
comment
Вижте също: stackoverflow .com/questions/136793/   -  person AndrewR    schedule 12.10.2008
comment
възможен дубликат на Има ли do ... while цикъл в Ruby?   -  person Buhake Sindi    schedule 04.08.2013


Отговори (3)


...Най-доброто, което можах да измисля, е конструкцията loop с break в края:

loop do
    ...
    break unless condition
end
person Cristian Diaconescu    schedule 10.10.2008
comment
Да, това е подходът, който Matz препоръчва. вижте blade.nagaokaut.ac.jp/cgi -bin/scat.rb/ruby/ruby-core/6745 - person Siwei; 23.05.2012

Можете да направите

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

(можете също да поставите клауза while до края на begin..end)

вижте стр. 128 от книгата Flanagan/Matz Ruby Prog'g Lang: Това е нещо, което може да бъде премахнато в версии след 1.8

person Gene T    schedule 10.10.2008
comment
Това би бил директният превод на do...while от C. Коментарът на Matz ме кара малко да се притеснявам да използвам това - person Cristian Diaconescu; 10.10.2008
comment
Мисля, че трябва да започна да тествам в 1.9 в ubuntu и OS X, не е трудно blog.michaelgreenly.com/2007/12/ - person Gene T; 10.10.2008

Можеш да използваш

while condition
  ...
end
person IDBD    schedule 10.10.2008
comment
докато условие не е същото като do while условие. в случай do while кодът се изпълнява поне веднъж. - person mat kelcey; 10.10.2008
comment
Смисълът на въпроса беше, че е очевидно как да се направи while (condition){...}, но не е толкова очевидно как да се направи do{...} while(condition), което изпълнява вътрешния блок поне веднъж, без значение какво. - person Cristian Diaconescu; 10.10.2008