【问题标题】:undefined method `even_or_odd' for main:Object (NoMethodError)main:Object (NoMethodError) 的未定义方法“even_or_odd”
【发布时间】:2019-03-07 16:56:13
【问题描述】:

我提前道歉。我是编程新手。我收到了错误

main:Object 的未定义方法 `even_or_odd' (NoMethodError)

尝试在 rails 中运行以下代码时。 任何帮助表示赞赏。

class Test
  attr_accessor :number

  def initialize(number)
    self.number = number
  end

  def even_or_odd(number)
    self.number = number

    if number % 2 == 0
      puts "Even"


    else 
      puts "Odd"
    end
  end
end

Test.assert_equals(even_or_odd(2), "Even")

【问题讨论】:

    标签: ruby-on-rails


    【解决方案1】:

    您已将此类中的所有方法定义为实例方法,应该在该类的实例上调用(所以可能是 Test.find(4))而不是类本身(只是 Test)。所以这样的事情应该可以工作:

    Test.new(4).even_or_odd(4) => true
    

    但是.. 我们用参数布置方法的方式意味着我们正在检查参数是否是偶数/奇数,而不是测试对象的编号。所以:

    Test.new(4).even_or_odd(5)
    

    将测试的“数字”属性重置为 5,然后检查该数字。我猜你想检查 Test 实例的 number 属性而不是你提供的参数,所以试试:

    class Test
      def initialize(number)
        @number = number
      end
    
      def even_or_odd
        if @number % 2 == 0
          puts "Even"
        else 
          puts "Odd"
        end
      end
    end
    

    这会让你执行:

    Test.new(4).even_or_odd
    

    我删除了 attr:accessor 位,以便更清楚地了解正在发生的事情,但如果您不喜欢每次都调用@number,请随意包含它。

    【讨论】:

    • 伙计,很酷。好的,这对我帮助很大。谢谢你,先生!
    猜你喜欢
    • 2015-01-23
    • 2012-04-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-22
    • 2023-03-30
    • 1970-01-01
    相关资源
    最近更新 更多