红宝石重做方法

时间:2013-03-29 00:43:56

标签: ruby

我正在学习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

只要重做在方法中,一切正常。我希望块重新运行,直到用户输入正确的答案。有人可以说这个街区有什么不对吗?

2 个答案:

答案 0 :(得分:4)

redo,与retry一样,将在循环中使用。

您可以将代码更改为

def question(quest, ans)
  puts quest

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

  puts "good job"
end

答案 1 :(得分:2)

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

这将开始工作,虽然这是违反直觉的,你是循环一次,但你不是:)

这种情况的更好方法是循环直到你得到答案。

相关问题