模块中的实例方法中的ruby self

模块中的实例方法中的ruby self,ruby,module,self,Ruby,Module,Self,因此,在上面的代码中,我了解到为了设置属性health,它需要1)在我包含模块的类中是一个访问器方法,2)在模块中需要self 在这种情况下,self指的是什么?由于模块中的方法是实例方法,因此需要在对象上调用它们,因此self引用Player类的实例,对吗?如果这是正确的,那么self.health引用attr_访问器方法,这段代码很有意义。如果没有“self”这个词,它将是一个局部变量赋值,对吗?这是什么?只是一个模块的方法。根据文档,它(实际上:归功于@JỏrgWMittag)创建了一个

因此,在上面的代码中,我了解到为了设置属性health,它需要1)在我包含模块的类中是一个访问器方法,2)在模块中需要self

在这种情况下,self指的是什么?由于模块中的方法是实例方法,因此需要在对象上调用它们,因此self引用Player类的实例,对吗?如果这是正确的,那么self.health引用attr_访问器方法,这段代码很有意义。如果没有“self”这个词,它将是一个局部变量赋值,对吗?这是什么?

只是一个
模块的方法。根据文档,它(实际上:归功于@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