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

6.4.5 继承关系

类型之间除了能够进行“是否相等”或“完全相同”判断,也能够进行“小于等于”或“大于等于”这种比较操作。不过意义不再是数值的大小,而是在类型拓扑图中,两者是否处于同一条路径上,即两者是否存在父子继承关系。

在实践中,可以使用<:作为操作符判断一个类型是否是另外一个的子类型,例如:


julia> Unsigned <: Integer
true

julia> Signed <: Real
true

julia> AbstractFloat <: Any
true

或者:


julia> Number <: Integer
false

julia> Real <: AbstractFloat
false

显然:


julia> DataType <: Any
true

这确实是一件很有意思的事情:如前所述,Any的类型是DataType,而DataType因为也是一种类型,所以也是Any的子类型。

另外,对于定义的类型别称,会自动获得源类型在类型系统中的位置,进而获得源类型的继承关系,例如:


julia> MyInt >: Int64
true

julia> MyInt <: Number
true

与操作符<:相对,也可以使用操作符>:判断一个类型是否是另外一个的父类型,例如:


julia> Unsigned >: Integer
false

julia> Number >: Integer
true

julia> Real >: Real
true

除了结果相反,用法上与<:是一致的。

如果参与继承关系断言的是同一个类型,会发现:


julia> Integer <: Integer
true

julia> Integer >: Integer
true

julia> Any <: Any
true

也同样是成立的。所以在Julia的类型系统中,类型与其自身是满足继承关系断言的,即与自身有父子关系。