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