2

私はRUBYを学んでいますが、redoメソッドに問題があります。ループとイテレータをいじって、それらのコツをつかもうとしています。次のコードがあります。

def question (quest , ans )
  puts quest
  a = gets.chomp
  if a == ans
    puts "good job"
  else
    puts "Try Again!"
    a = gets.chomp
    redo
  end
end

メソッドにやり直しが含まれている限り、すべてが正常に機能します。ユーザーが正しい答えを入力するまで、ブロックを再実行します。このブロックのどこが悪いのか誰か教えてもらえますか?

4

2 に答える 2

4

redo、 likeretryはループ内で使用されます。

コードを次のように変更できます

def question(quest, ans)
  puts quest

  puts "Try Again!" while gets.chomp != ans

  puts "good job"
end
于 2013-03-29T00:49:52.837 に答える
4

redoループ内で使用されることになっており、現在の反復を繰り返すため、コードで使用したい場合は、redoループ内に配置します。

def question (quest , ans )
  1.times do
    puts quest
    a = gets.chomp
    if a == ans
      puts "good job"
    else
      puts "Try Again!"
      redo
    end
  end
end

これは機能し始めますが、非常に直感に反していますが、一度ループしていますが、そうではありません:)

このような場合のより良い方法は、答えが得られるまでループすることです。

于 2013-03-29T02:39:13.340 に答える