我一直收到此错误,但似乎无法修复

问题描述 投票:-1回答:1

我不断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概念,但即使那样也没有。似乎没有用,我已经尝试了几乎所有东西,并花了数小时试图获得此信息,请有人帮忙

ruby-on-rails ruby function oop nomethoderror
1个回答
0
投票

我认为这是您想要做的:

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
© www.soinside.com 2019 - 2024. All rights reserved.