Ruby には「do ... while」ループがありますか? 質問する

Ruby には「do ... while」ループがありますか? 質問する

このコードを使用して、ユーザーが名前を入力し、プログラムが空の文字列を入力するまでその名前を配列に保存できるようにします (名前を入力するたびに Enter キーを押す必要があります)。

people = []
info = 'a' # must fill variable with something, otherwise loop won't execute

while not info.empty?
    info = gets.chomp
    people += [Person.new(info)] if not info.empty?
end

このコードは、do ... while ループで使用すれば、はるかに見栄えが良くなります。

people = []

do
    info = gets.chomp
    people += [Person.new(info)] if not info.empty?
while not info.empty?

このコードでは、ランダムな文字列に情報を割り当てる必要はありません。

残念ながら、このタイプのループは Ruby には存在しないようです。これを実行するより良い方法を提案してくれる人はいますか?

ベストアンサー1

注意

begin <code> end while <condition>Rubyの作者Matzによって拒否されています。代わりに彼は を使用することを提案していますKernel#loop。例:

loop do 
  # some code here
  break if <condition>
end 

こちらはメールのやり取り2005年11月23日、マツ氏は次のように述べています。

|> Don't use it please.  I'm regretting this feature, and I'd like to
|> remove it in the future if it's possible.
|
|I'm surprised.  What do you regret about it?

Because it's hard for users to tell

  begin <code> end while <cond>

works differently from

  <code> while <cond>

ロゼッタコードウィキ同様の話があります:

2005 年 11 月、Ruby の作者であるまつもとゆきひろ氏はこのループ機能を残念に思い、Kernel#loop を使用することを提案しました。

おすすめ記事