2017-01-09 5 views
0

Ich habe einen Code unten:Rubin undefined Variable

secret_number = 8 
user_input = "" 

def number_guesser(user_input) 
    while user_input != secret_number 
    puts "Guess a number between 1 and 10:" 
    user_input = gets.chomp 

    if user_input != secret_number 
     puts "Wrong! Try again." 
    else 
     puts "You guessed correctly!" 
    end 
    end 
end 

number_guesser(user_input) 

als ich versuchte, das obige Programm, um es auszuführen, wie unten gezeigt:

**** undefined lokale Variable oder Methode secret_number' for main:Object (repl):211:in number_guesser‘ (repl): 221: in `'****

Irgendwelche Ideen?

Antwort

6

Sie können keine lokale Variable wie diese in einem anderen Bereich wie einer Methode verwenden, es sind zwei verschiedene Kontexte. Stattdessen müssen Sie das übergeben, wenn Sie es verwenden möchten.

Es ist eine einfache Änderung.

def number_guesser(user_input, secret_number) 
    # ... 
end 

Dann füttern gerade dieses Argument in

Sie werden bemerken, dass user_input als Parameter nicht wirklich notwendig ist, können Sie immer initialisieren und verwenden, die lokal Es ist also sinnlos als Argument.

Das Muster in diesem Fall zu verwenden:

loop do 
    input = gets.chomp 

    # Prompting... 

    break if input == secret_number 

    # Guessed wrong... 
end 
+0

Außerdem 'secret_number' eine ganze Zahl während' input' ein String ist, so dass Sie das eine oder andere umwandeln. – Stefan