Sto giocando con Ruby e sto provando a creare un piccolo programma di conto bancario. Quando ho eseguito questa particolare linea di codice che è in esecuzione il withing create_account:Ruby 'is_a?' Classe o modulo richiesto (TypeError)
unless @response.is_a? Integer && @response.to_str.length == 4
puts "Your response must be 4 numbers in length."
create_account
else
@pin = @response
puts "Your pin has been set."
end
ottengo questa risposta:
bank_account.rb:24:in 'is_a?':class or module required (TypeError)
from bank_account.rb:24:in 'create_account'
from bank_account.rb:47:in '<main>'
non riesco a capire esattamente cosa sta succedendo, ma sto compreso il resto del mio codice. È incompleto, ovviamente perché sono bloccato su questa parte. Passo un ciclo while e inserisco 'Create Account' per avviare il metodo create_account. Il mio obiettivo è quello di eseguire il condizionale e richiedere all'utente di digitare un numero intero a 4 cifre, come qualsiasi numero di pin ole. Se non è un numero intero o 4 cifre di lunghezza, chiamo il metodo create_account per farli ricominciare.
Sto eseguendo Ruby 2.0.0 se tale informazione è necessaria, ma scommetto che probabilmente ha più a che fare con il mio codice. StackOverflow è nuovo per me, quindi mi scuso se questa domanda è stata posta. Ho provato a fare i compiti come consigliato prima di fare una domanda, ma sono ancora perplesso. Qualsiasi aiuto è apprezzato.
Non mi rendevo conto che includeva l'intera seconda parte del condizionale se non mettevo specificatamente la classe tra parentesi. Grazie. Non riesco ancora a far accettare qualcosa di quattro numeri per qualche motivo, ma un problema alla volta. –
@MarkHJr, se '@ response' è effettivamente un' Integer', quindi non puoi chiamare 'to_str' su di esso, solo' to_s'. Quando provo il tuo test nella console con il valore '454524' ottengo questo messaggio:' NoMethodError: metodo non definito 'to_str 'per 454524: Fixnum'. – maurice
buona risposta e spiegazione! Risolto il mio problema molto velocemente quando avrebbe impiegato molto più tempo. +1 –