我不断收到此错误,但似乎无法修复

时间:2020-05-13 21:20:02

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

我不断得到
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概念,但即使这样也没有似乎没有用,我已经尝试了几乎所有内容,并花了数小时试图获得此功能,有人可以帮忙

1 个答案:

答案 0 :(得分: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