在 Crystal 中,有两种不同的方法可以实现相似的结果:
创建一个类...
class Service
def self.get
# ...
end
end
或扩展
self
的模块:module Service
extend self
def get
# ...
end
end
两者都可以调用方法
get
通过 Service.get
.但是什么时候使用类或模块呢? Crystal 的类和模块有什么区别?
最佳答案
关于类方法的定义,class
和 module
没有太大区别。然而,它们根本不同,因为一个类定义了一个可以实例化的类型( Service.new
)。模块也可以有实例方法,但不能直接实例化,只能包含在类中。
如果您只需要类方法的命名空间,则应使用 module
。 class
也适用于此,但传达了不同的含义。
顺便说一句:虽然你不能 extend
或 include
一个类,但在一个模块中你可以写 def self.get
而不是 extend
。
关于class - 何时在 Crystal 中使用扩展 self 的类与模块?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50200800/