在Crystal中,有两种不同的方法可以实现类似的结果:
创建课程......
class Service
def self.get
# ...
end
end
或扩展self
的模块:
module Service
extend self
def get
# ...
end
end
两者都可以通过get
调用方法Service.get
。
但何时使用课程或模块? Crystal的类和模块之间有什么区别?
答案 0 :(得分:6)
关于类方法的定义,class
和module
之间没有太大区别。然而,它们在一个类定义可以实例化的类型(Service.new
)这一事实上根本不同。模块也可以有实例方法,但它们不能直接实例化,只包含在类中。
如果您只需要类方法的命名空间,则应使用module
。 class
也适用于此,但传达了不同的含义。
顺便说一下:虽然你不能extend
或include
一个班级,但在一个模块中你可以写def self.get
而不是extend
。
答案 1 :(得分:3)
但何时使用课程或模块?
使用module
。通过这种方式,module
可以用作命名空间。
Crystal的类和模块之间有什么区别?
module
无法实例化,可以包含在类