2014-04-29 12 views
16

Gram z Ruby i próbuję stworzyć mały program do obsługi konta bankowego. Kiedy uruchomić tego konkretnego wiersza kodu, który jest uruchomiony withing na create_account:Ruby 'is_a?' wymagana klasa lub moduł (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 

uzyskać tej odpowiedzi:

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

Nie mogę dokładnie dowiedzieć się, co się dzieje, ale ja w tym reszta mojego kodu. Jest niekompletne, oczywiście dlatego, że utknąłem w tej części. Przejdę przez chwilę i wpisuję "Utwórz konto", aby rozpocząć metodę create_account. Moim celem jest uruchomienie warunkowego i wymaganie od użytkownika podania 4 cyfrowej liczby całkowitej, jak każdy inny numer pinola. Jeśli nie jest liczbą całkowitą ani 4 cyframi, wywołuję metodę create_account, aby rozpocząć od nowa.

Używam ruby ​​2.0.0, jeśli ta informacja jest niezbędna, ale założę się, że prawdopodobnie będzie to miało związek z moim kodem. Stackoverflow jest dla mnie nowy, więc przepraszam, jeśli to pytanie zostało zadane. Próbowałem odrabiać zadania domowe, jak zaleca się, zanim zadaję pytanie, ale wciąż jestem zakłopotany. Każda pomoc jest doceniana.

Odpowiedz

42

Musisz umieścić klasę Integer w nawiasach:

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

są faktycznie evaulating is_a? na (Integer && @response.to_str.length == 4) która jest wartością logiczną, a nie klasy lub modułu.

+0

Nie zdawałem sobie sprawy, że obejmowałem całą drugą część warunkowego, jeśli nie umieściłem konkretnie tej klasy w nawiasie. Dziękuję Ci. Nadal nie mogę zmusić go do zaakceptowania czegoś z czterech powodów długości, ale jednego problemu na raz. –

+0

@MarkHJr, jeśli '@ odpowiedź' jest rzeczywiście' Integer', to nie możesz wywołać 'to_str' na nim, tylko' to_s'. Kiedy próbuję twojego testu w konsoli o wartości '454524', pojawia się następujący komunikat:' NoMethodError: undefined method' to_str 'for 454524: Fixnum'. – maurice

+0

Dobra odpowiedź i wyjaśnienie! Rozwiązałem mój problem bardzo szybko, gdy mogło to zająć dużo dłużej. +1 –

Powiązane problemy