这在函数签名中是什么意思,例如:
convert(::Type{T}, z::Complex) where {T<:Real}
答案 0 :(得分:5)
<:( T1,T2)
子类型运算符:当且仅当类型为true
的所有值都为时,返回T1
也是类型T2
。
示例:
Float64 <: AbstractFloat
=> true
Vector{Int} <: AbstractArray
=> true
Matrix{Float64} <: Matrix{AbstractFloat}
=> false
答案 1 :(得分:5)
严格来说,应该区分@Saquib的答案中的谓词Base.:(<:)
和用于描述约束的<:
的句法用法。
这种语法用法可以发生在类型参数声明中,以将类型变量约束为某些其他类型的子类型:
f(x::T) where {T<:Real} = zero(x)
在类型声明中,将新类型声明为某些其他(必要的是抽象)类型的子类型:
struct Foo <: Real end
尽管这两种情况都与子类型谓词的含义一致,但是您不能将它们替换为其他任意表达式(例如,不能在... where {isreal(T)}
中写f
)。