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



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

正在创建类...

class Service
def self.get
# ...
end
end

或扩展self的模块:

module Service
extend self
def get
# ...
end
end

两者都可以调用Service.getget的方法。

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

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

如果只需要类方法的命名空间,则应使用module.class也可以这样做,但传达了不同的含义。

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

但是什么时候使用类或模块?

使用module.通过这种方式,module可以用作命名空间。

Crystal 的类和模块有什么区别?

module不能实例化,可以包含在类中

请参阅: 模块文档

最新更新