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

标签 class module crystal-lang

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

创建一个类...

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

或扩展 self 的模块:
module Service
  extend self

  def get
    # ...
  end
end

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

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

最佳答案

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

如果您只需要类方法的命名空间,则应使用 moduleclass 也适用于此,但传达了不同的含义。

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

关于class - 何时在 Crystal 中使用扩展 self 的类与模块?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50200800/

相关文章:

Java:数组在类之间传输,但值却不能?

amazon-web-services - AWS CDK -- 找不到模块 '@aws-cdk/aws-ec2'

module - 在方案中向右折叠

c# - 如何从另一个类访问具有 protected 构造函数的类

IOS,为什么有些开发人员在模拟中创建带下划线的变量(_variable)

c# - C# 如何返回结构体

wpf - Prism/MEF : How to RegisterViewWithRegion Without Hard-Coding the Region Name

crystal-lang - Crystal Lang 编译速度

git - 碎片包和 Crystal 要忽略什么

crystal-lang - Crystal lang 中的 **(Double splat)有什么作用?