2013-03-29 121 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 

,這將開始工作,雖然這是非常反直覺的,你是一個循環時間,但你是不是:)這樣的情況下

更好的方法是隻循環,直到你得到的答案。