Julia语言程序设计
上QQ阅读APP看书,第一时间看更新

6.4.3 DataType

在Julia中一切皆对象,类型本身也是可以操作的对象。如果我们将某类型作为参数,使用typeof()查看其类型,会发现:


julia> typeof(Int64)
DataType

julia> typeof(Integer)
DataType

julia> typeof(Any)
DataType

其中,DataType便是Julia中包括元类型、抽象类型及后文介绍的复合类型等所有类型的“类型”;而且也是Any的类型(换言之,Any是其实例之一)。事实上,DataType本身也是类型的一种,在类型系统中也是Any的子类型之一。

对于类型对象,前述的isa()函数与断言操作符::同样适用,例如:


julia> isa(Int, DataType)
true

julia> isa(Any, DataType)
true

julia> isa(DataType, DataType)
true

julia> Int64::DataType
Int64

julia> Real::DataType
Real

julia> DataType::DataType                              # DataType是DataType自身的类型
DataType

可以说,在Julia的类型系统中,任意的类型均是DataType的实例(对象)。这样的设计机制使得Julia的类型系统构成了所谓“完备的闭集”,在概念与操作上具备充分的统一性。

为此,作为可操作的对象,类型之间也可以使用“是否相等”或“完全相同”运算符,判断它们是否是同样的类型,例如:


julia> Real == Number
false

julia> Int32 === Int32
true