昨天遇到个问题没想通:
julia> struct X{T<:Union{Float64,Function}}
a::T
end
julia> a = X(1.)
X{Float64}(1.0)
julia> b = X(identity)
X{typeof(identity)}(identity)
julia> a isa X{Float64}
true
julia> b isa X{Function}
false
julia> identity isa Function
true
这里为什么 b isa X{Function}
是false
?
注:
在参数类型的文档中 类型 · Julia中文文档 有提到某个类型中参数的继承关系并不能被外层的类型继承,即:
This last point is very important: even though
Float64 <: Real
we DO NOT havePoint{Float64} <: Point{Real}
.
但是,这里的问题在于,b
的类型应该是excatly equal to X{Function}
才对?
julia> typeof(a)
X{Float64}
julia> typeof(a) == X{Float64}
true
julia> typeof(b)
X{typeof(identity)}
julia> typeof(b) == X{Function}
false
注注:
目前我折中的做法是,在multiple dispatch的时候,声明参数的类型是f(x::X{<:Function})
:
b isa X{<:Function}
true