web-dev-qa-db-ja.com

Ruby 'is_a?'クラスまたはモジュールが必要です(TypeError)

Rubyで遊んでいて、小さな銀行口座プログラムを作成しようとしています。create_accountで実行されているこの特定のコード行を実行すると、次のようになります。

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メソッドを開始します。私の目標は、条件を実行し、他のoleピン番号と同様にユーザーに4桁の整数を入力するように要求することです。整数でも4桁でもない場合は、create_accountメソッドを呼び出して最初からやり直します。

私は実行していますRuby 2.0.0その情報が必要な場合、しかし私はそれが私のコードに関係している可能性が高いと賭けています。Stackoverflowは私にとって新しいので、この質問があった場合はお詫びします質問する前にアドバイス通りに宿題をしようとしましたが、それでも困惑しています。助けていただければ幸いです。

21
Mark H Jr

クラスIntegerを括弧で囲む必要があります。

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

実際には、クラスやモジュールではなくブール値であるis_a?(Integer && @response.to_str.length == 4)を評価しています。

53
user740584