在 Crystal 中,有两种不同的方法可以实现类似的结果:
正在创建类...
class Service
def self.get
# ...
end
end
或扩展self
的模块:
module Service
extend self
def get
# ...
end
end
两者都可以调用Service.get
get
的方法。
但是什么时候使用类或模块呢?Crystal 的类和模块有什么区别?
class
和module
在类方法的定义方面没有太大区别。然而,它们的根本不同在于类定义了一个可以实例化的类型(Service.new
)。模块也可以有实例方法,但它们不能直接实例化,只能包含在类中。
如果只需要类方法的命名空间,则应使用module
.class
也可以这样做,但传达了不同的含义。
顺便说一句:虽然你不能extend
或include
一个类,但在模块中你可以编写def self.get
而不是extend
。
但是什么时候使用类或模块?
使用module
.通过这种方式,module
可以用作命名空间。
Crystal 的类和模块有什么区别?
module
不能实例化,可以包含在类中
请参阅: 模块文档