类与模块方法的实例方法

时间:2014-10-22 18:18:49

标签: ruby module

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

  

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

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

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

module GameTurn

    def self.take_turn(player)

    end

1 个答案:

答案 0 :(得分: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

您还有两个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