2014-04-29 2 views
16

Je joue avec Ruby et essaie de créer un petit compte bancaire. Quand je lance cette ligne de code qui exécute le CREATE_ACCOUNT sont acceptés dans:Ruby 'is_a?' classe ou module requis (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 

Je reçois cette réponse:

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>' 

Je ne peux pas comprendre exactement ce qui se passe, mais je suis compris le reste de mon code. C'est incomplet, évidemment parce que je suis coincé sur cette partie. Je traverse une boucle while et saisis 'Create Account' pour démarrer la méthode create_account. Mon but est d'exécuter le conditionnel et de demander à l'utilisateur de taper un nombre entier à 4 chiffres, comme n'importe quel nombre de broches. Si ce n'est pas un entier ni 4 chiffres, j'appelle la méthode create_account pour les faire recommencer.

Je cours ruby ​​2.0.0 si cette information est nécessaire, mais je parie que c'est plus susceptible de faire avec mon code. Stackoverflow est nouveau pour moi, alors je m'excuse si cette question a été posée. J'ai essayé de faire mes devoirs comme il est conseillé avant de poser une question, mais je suis toujours perplexe. Toute aide est appréciée.

Répondre

42

Vous devez mettre la classe Integer entre parenthèses:

unless @response.is_a?(Integer) && @response.to_str.length == 4 

Vous evaulating effectivement is_a? sur (Integer && @response.to_str.length == 4) qui est une valeur booléenne, pas une classe ou d'un module.

+0

Je n'avais pas réalisé qu'il comprenait toute la seconde moitié du conditionnel si je n'avais pas spécifiquement mis la classe entre parenthèses. Je vous remercie. Je n'arrive toujours pas à accepter un nombre de quatre chiffres pour une raison quelconque, mais un problème à la fois. –

+0

@MarkHJr, si '@ response' est bien un' Integer', alors vous ne pouvez pas appeler 'to_str', seulement' to_s'. Lorsque j'essaie votre test dans la console avec la valeur '454524', j'obtiens ce message:' NoMethodError: méthode non définie 'to_str 'pour 454524: Fixnum'. – maurice

+0

bonne réponse et explication! J'ai résolu mon problème très rapidement quand cela aurait pu prendre beaucoup plus de temps. +1 –

Questions connexes