上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的类型系统中,类型与其自身是满足继承关系断言的,即与自身有父子关系。