上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