朱莉娅:“ <:”符号是什么意思?

时间:2018-10-26 19:50:29

标签: julia

这在函数签名中是什么意思,例如:

convert(::Type{T}, z::Complex) where {T<:Real}

2 个答案:

答案 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)。