Julia中参数化类型及其超类型的理解困惑求助
关于Julia中Rational{Int64}超类型的困惑解答
你之前的误解核心在于把Rational当成了一个可作为超类型的抽象类型,但实际上**Rational只是一个类型构造器,并非实际的类型层级节点**。
在Julia的类型系统里:
Rational本身不能被实例化,它是用来生成具体参数化类型(比如Rational{Int64}、Rational{UInt32})的模板。- 所有由
Rational构造出的具体类型,都直接子类型于Real,所以supertype(Rational{Int64})返回Real是完全符合设计的。 - 调用
supertype(Rational)返回Real,是因为Julia将Rational(代表所有Rational{T}实例的集合)视为Real的子类型范畴,这是为泛型编程和类型推断做的语法便利,但本质上Rational并不是Rational{Int64}的直接超类型。
你可以通过以下代码验证这个逻辑:
# 验证Rational{Int64}是否是Rational的子类型 julia> Rational{Int64} <: Rational false # 验证Rational{Int64}是Real的子类型 julia> Rational{Int64} <: Real true # 查看Rational的类型,确认它是类型构造器(UnionAll) julia> typeof(Rational) UnionAll
简单来说,你以为的Rational{Int64} <: Rational <: Real这条类型链并不存在,正确的链是Rational{Int64} <: Real <: Number <: Any。
内容的提问来源于stack exchange,提问作者junjios
相关产品推荐
相关产品推荐

