2014-04-29 73 views
16

我在玩Ruby,嘗試創建一個小型銀行賬戶程序。當我運行的運行withing的CREATE_ACCOUNT的代碼這一行:Ruby'is_a?'需要類或模塊(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 

我得到這樣的迴應:

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

我不能確切地弄清楚是怎麼回事,但我包括我的代碼的其餘部分。這是不完整的,顯然是因爲我被困在這一部分。我經歷了一個while循環並輸入'Create Account'來啓動create_account方法。我的目標是運行條件,並要求用戶鍵入一個4位數的整數,就像任何ole針號碼一樣。如果它不是一個整數,也不是4位數字,我調用create_account方法讓它們重新開始。

我正在運行ruby 2.0.0,如果該信息是必要的,但我打賭它可能更多與我的代碼。 Stackoverflow對我來說是新的,所以我很抱歉如果這個問題已被問到。在提出問題之前,我試圖按照建議做功課,但我仍然難住。任何幫助表示讚賞。

回答

42

你需要把類Integer括號:

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

你實際上是在evaulating (Integer && @response.to_str.length == 4)is_a?這是一個布爾值,而不是一個類或模塊。

+0

我沒有意識到,如果我沒有專門將類放在括號中,那麼它就包含了條件的整個後半部分。謝謝。由於某種原因,我仍然無法接受長度爲四位的數字,但一次只能解決一個問題。 –

+0

@MarkHJr,如果'@ response'實際上是一個'Integer',那麼你不能調用'to_str',只有'to_s'。當我在控制檯中使用值「454524」進行測試時,出現以下消息:'NoMethodError:undefined method'to_str'for 454524:Fixnum'。 – maurice

+0

很好的回答和解釋!可能需要更長時間才能真正解決我的問題。 +1 –

相關問題