2

我正在学习 RUBY,但我对重做方法有疑问。我正在玩循环和迭代器,试图掌握它们的窍门。我有以下代码:

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 回答