贡献者: addis
本文授权转载自郝林的 《Julia 编程基础》。原文链接:第 4 章 类型系统。
在本章,我们主要讨论了 Julia 的类型系统。虽然 Julia 属于动态类型的编程语言,但我们却可以为程序中的变量(以及函数中的参数和结果)添加类型标注,并以此让它们的类型固定下来。
如果只用三个词来概括 Julia 的类型系统的话,那么就应该是:动态的、记名的和参数化的。动态指的是变量的类型也可以被改变。记名是指,Julia 会以类型的名称来区分它们。参数化的意思是,Julia 的类型可以被参数化。或者说,Julia 对泛型提供了完整的支持。
我们讲解了超类型、子类型以及继承的概念。Julia 中的类型共同组成了一幅类型图。它们要么存在着直接或间接的继承关系,要么有着共同的超类型。Julia 代码中的任何值都是有类型的。也就是说,Julia 程序中的每一个值都分别是其所属类型的一个实例。并且,某一个类型的实例必然也是该类型的所有超类型的实例。
关于抽象类型以及两种具体类型,我已经在上一节的最后总结过了,在这里就不再重复了。不过,我们需要特别关注两个 Julia 预定义的抽象类型,即:所有类型的超类型 Any
和所有类型的子类型 Union{}
。它们都在类型图中有着特殊的地位。
本章的内容可以让你对 Julia 的类型系统有一个正确的认知。虽然没有涉及到太多的细节,但对于类型相关的概念你应该已经比较熟悉了。我们会在后面频繁地提及和运用这里所讲述的基础知识。