【问题标题】:I keep getting this error and i can't seem to fix it我不断收到此错误,我似乎无法修复它
【发布时间】:2020-05-13 21:20:02
【问题描述】:

我不断收到
in `eater': undefined method `hunger' for Human:Class (NoMethodError)

这是我写的代码:

   class Human
    attr_reader :name, :age, :hunger
    def initialize(name,age);
        @name = name
        @age = age
        @hunger = 50
    end 
    def eater() ;
        Human.hunger -= 10          
    end 
end

person = Human.new('Josh',32)
puts person.eater  

基本上我想将人的饥饿感减少 10,然后打印当前的饥饿量,但不是打印它,而是一直给我这个错误,我有点使用 python 中的 OOP 的概念,但即使这样也没有'似乎不起作用,我已经尝试了几乎所有东西并花了几个小时试图得到这个有人可以帮忙

【问题讨论】:

  • 在你的食客方法中尝试 self.hunger
  • ^^ 这就是答案
  • 不要在 Ruby 代码中添加任意分号 (;)。这些什么都不做,也不属于那里。

标签: ruby-on-rails ruby function oop nomethoderror


【解决方案1】:

我认为这就是你想要做的:

class Human
  attr_reader :name, :age, :hunger

  def initialize(name, age, hunger = 50)
    @name = name
    @age = age
    @hunger = hunger
  end

  def eater
    @hunger -= 10
  end
end

person = Human.new('Josh', 32)
puts person.eater

除非您希望所有对象的@hunger 始终为50 并且不更改。

不要像使用@hunger = 50 那样在对象上设置默认值作为实例变量。相反,您希望该默认值包含在参数中。

此外,这个Human.hunger -= 10 应该是@hunger -= 10,因为我假设当您在对象上调用#eater 时,您希望它减少10

您似乎没有使用attr_reader :name, :age, :hunger 提供的任何方法,您不妨去掉该行,因为attr_reader :name 只是一个捷径:

def name
  @name
end

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-01
    • 2021-07-18
    • 2019-05-29
    • 1970-01-01
    • 2019-06-10
    相关资源
    最近更新 更多