Ruby 'is_a?' 需要类或模块 (TypeError)

标签 ruby while-loop integer conditional 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 方法。我的目标是运行条件并要求用户键入一个 4 位整数,就像任何 ole pin 号码一样。如果它不是整数或 4 位长度,我将调用 create_account 方法让它们重新开始。

如果该信息是必需的,我正在运行 ruby​​ 2.0.0,但我敢打赌这可能更多地与我的代码有关。 Stackoverflow 对我来说是新手,所以如果有人问这个问题,我深表歉意。在提问之前,我试着按照建议做功课,但我仍然很困惑。感谢您的帮助。

最佳答案

您需要将类 Integer 放在括号中:

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

您实际上是在 (Integer && @response.to_str.length == 4) 上评估 is_a?,这是一个 bool 值,而不是类或模块。

关于Ruby 'is_a?' 需要类或模块 (TypeError),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23372692/

相关文章:

ruby-on-rails - 在 Ruby on Rails 中增量构建任意 URL

ruby - 有没有办法从其 Object.inspect 方法的输出中重新创建一个对象?

c++ - 仅使用整数计算两条线的交点

integer - 在 z3 中定义有界整数

c++ - 具有不同内存表示的 n 字节大小的整数

ruby 管道 : How do I tie the output of two subprocesses together?

ruby - 一行 if 语句不起作用

python - 使用 while 循环重复生成随机数的函数

php - 为什么我会返回重复的结果?

python while循环意外行为