类与模块方法的实例方法

Jwa*_*622 3 ruby module

我正在阅读Ruby的模块方法的这个解释,以及它们与类的实例方法的不同之处.这是我正在阅读的解释:

请记住,与实例方法不同,需要在模块本身上定义模块方法.你如何访问该模块?回想一下,在模块定义中,self指的是被定义的模块.因此,您需要使用self.xxx形式定义方法.

我不完全明白.当我们在Classes中定义方法时,我们不必在类本身上定义它.我们只是在类的实例化对象上调用它.

为什么我们需要使用术语"self"在模块本身上定义模块方法?这是为了什么目的?为什么我们不能在不使用术语self的情况下定义模块方法?以下是我的模块框架的外观:

module GameTurn

    def self.take_turn(player)

    end
Run Code Online (Sandbox Code Playgroud)

tad*_*man 7

有两种module方法:

  • 打算混合到其他模块或类中的那些:"Mixins"
  • 那些打算直接使用的:"暴露方法"

例如:

module Example
  def self.exposed_method
    # This method is called as Example.exposed_Method
  end

  def mixin_method
    # This method must be imported somewhere else with include or extend
    # or it cannot be used.
  end
end
Run Code Online (Sandbox Code Playgroud)

你也有两个class:

  • 仅在类的实例上调用的那些:"实例方法"
  • 直接在课堂上调用的那些:"类方法"
    • 这些在其他语言中也称为"静态方法".

例:

class ExampleClass
  def self.class_method
    # This can be called as ExampleClass.class_method
  end

   def instance_method
     # This can only be called on an instance: ExampleClass.new.instance_method
   end
end
Run Code Online (Sandbox Code Playgroud)

  • 如果你在`ExampleClass`中添加`include Example`(或在定义类后调用`ExampleClass.include Example`),你可以使用实例方法`Example#mixin_method`,这样可能会混淆tadman的漂亮,干净的答案.就像你在类中定义它一样,但是你没有"获取"模块方法`Example.exposed_method`,即你不能调用`ExampleClass#.exposed_method`.你必须使用`Example.exposed_method`.有一种方法可以将模块mixin方法作为类方法引入类中,但是在Ruby教育的这个阶段你不需要关心它. (2认同)