【问题标题】:ruby Redo method红宝石重做方法
【发布时间】:2013-03-19 15:30:41
【问题描述】:

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

只要方法中有重做,一切正常。我希望该块重新运行,直到用户输入正确的答案。有人能说出这个块有什么问题吗?

【问题讨论】:

  • redo 不是方法,而是关键字。

标签: ruby


【解决方案1】:

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

这将开始工作,虽然它非常违反直觉,你正在循环一次但你不是:)

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

【讨论】:

    【解决方案2】:

    redo,如retry,将在循环内使用。

    您可以将代码更改为

    def question(quest, ans)
      puts quest
    
      puts "Try Again!" while gets.chomp != ans
    
      puts "good job"
    end
    

    【讨论】:

    • 谢谢你,这看起来更干净了,但我仍然不确定如何使用重做......不是在块内重做吗?它被放置在 if 循环的结束之前。
    • if 块不是循环。检查此:rubyquicktips.com/post/1122838559/redo-vs-retry 以获取有关 redo 的信息。
    猜你喜欢
    • 2015-03-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-28
    • 2010-09-08
    • 2023-04-07
    • 1970-01-01
    相关资源
    最近更新 更多