何时使用类与模块在Crystal中扩展self?

Vin*_*sil 4 module class crystal-lang

在Crystal中,有两种不同的方法可以实现类似的结果:

创建一个类......

class Service
  def self.get
    # ...
  end
end
Run Code Online (Sandbox Code Playgroud)

或扩展的模块self:

module Service
  extend self

  def get
    # ...
  end
end
Run Code Online (Sandbox Code Playgroud)

两者都可以调用该方法get通过Service.get.

但是什么时候使用类或模块?Crystal的类和模块之间有什么区别?

Joh*_*ler 7

没有太大的区别classmodule类方法有关的定义.然而,它们在一个类定义可以实例化的类型(Service.new)的事实上根本不同.模块也可以有实例方法,但它们不能直接实例化,只包含在类中.

如果您只需要类方法的命名空间,则应该使用module.class对此也会很好,但传达了不同的含义.

顺便说一下:虽然你不能extendinclude一个班级,但在一个模块中你可以写def self.get而不是extend.