模块中的实例方法中的ruby self
因此,在上面的代码中,我了解到为了设置属性health,它需要1)在我包含模块的类中是一个访问器方法,2)在模块中需要self 在这种情况下,self指的是什么?由于模块中的方法是实例方法,因此需要在对象上调用它们,因此self引用Player类的实例,对吗?如果这是正确的,那么self.health引用attr_访问器方法,这段代码很有意义。如果没有“self”这个词,它将是一个局部变量赋值,对吗?这是什么?只是一个模块中的实例方法中的ruby self,ruby,module,self,Ruby,Module,Self,因此,在上面的代码中,我了解到为了设置属性health,它需要1)在我包含模块的类中是一个访问器方法,2)在模块中需要self 在这种情况下,self指的是什么?由于模块中的方法是实例方法,因此需要在对象上调用它们,因此self引用Player类的实例,对吗?如果这是正确的,那么self.health引用attr_访问器方法,这段代码很有意义。如果没有“self”这个词,它将是一个局部变量赋值,对吗?这是什么?只是一个模块的方法。根据文档,它(实际上:归功于@JỏrgWMittag)创建了一个
模块的方法。根据文档,它(实际上:归功于@JỏrgWMittag)创建了一个实例变量,同时创建了getter方法health
和setter方法health=
(您是否要创建getter/setter,分别使用attr\u reader
和attr\u writer
)
当Ruby解释器找到一个新名称时,它会在创建具有该名称的新局部变量之前尝试解析它。一旦定义了getter,就会使用它
在您拥有health
(明确定义,或借助attr\u getter
/attr\u accesor
)的getter之前,此代码将创建具有该名称的局部变量
希望一切顺利 不,health
与self.health
一样是对访问者的调用<代码>自我健康
更加明确易读,但这是错误的attr\u访问器
不创建实例变量。分配给实例变量将创建实例变量。在创建任何实例之前,在类定义时执行实例变量时,attr\u accessor
如何创建实例变量?此外,局部变量会影响方法,而不是相反。不管你是否有getter,@JörgWMittag我更正了关于实例变量的措辞,谢谢。我从来没有说过方法会影响局部变量:“找到一个新名称,它会在创建新的局部变量之前尝试解析它。”
class Player
include Playable
attr_reader :points
attr_accessor :health, :name
def initialize(name, health=100, points=0)
@name = name.capitalize
@health = health
@found_treasures = Hash.new(0)
@points = points
end
end
module Playable
def blam
self.health -= 10
puts "#{name} just got blammed yo."
end
def w00t
self.health += 15
puts "\n#{name} just got w00ted."
end
def score
self.health + points
end
def strong?
health > 100
end
end