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

时间:2019-03-07 16:56:13

标签: ruby-on-rails

我事先表示歉意。我是编程新手。我遇到了错误

  

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")

1 个答案:

答案 0 :(得分:2)

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

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

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

Test.new(4).even_or_odd(5)

将测试的'number'属性重置为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,请随意添加。