2013-03-29 120 views
1

即时通讯学习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 

只要重做是在方法中,一切正常工作。我想要块重新运行,直到用户输入正确的答案。有人可以告诉这个区块有什么问题吗?

+0

'redo'不是一种方法,它是一个关键字。 –

回答

4

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

你可以改变你的代码

def question(quest, ans) 
    puts quest 

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

    puts "good job" 
end 
+0

谢谢你,这看起来更干净,但我仍然不知道如何使用重做,然后...不是在块内重做?它放在if循环的结尾之前。 –

+0

一个'if'块不是一个循环。检查此:http://rubyquicktips.com/post/1122838559/redo-vs-retry有关'redo'的信息。 – oldergod

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 

,这将开始工作,虽然这是非常反直觉的,你是一个循环时间,但你是不是:)这样的情况下

更好的方法是只循环,直到你得到的答案。