我正在尝试定义一个结构NodeLocator
@with_kw mutable struct NodeLocator{T<:Int64}
length::T = 0
value::Vector{T} = [0]
maxtreelength::T = 0 end
Run Code Online (Sandbox Code Playgroud)
而且没有任何问题。
然而,我认为如果我这样做的话我的定义会更清晰
@with_kw mutable struct NodeLocator{T<:Union{Int64, Vector{Int64}}} # changed definition of T
length::T = 0
value::T = [0] # changed type declaration here
maxtreelength::T = 0 end
#since
julia> Vector{Int64} <: Union{Int64,Vector{Int64}}
true
Run Code Online (Sandbox Code Playgroud)
但在这种情况下,我在构造这种类型的对象时遇到错误:
错误:MethodError:没有方法匹配 NodeLocator(::Int64, ::Vector{Int64}, ::Int64) 最接近的候选者是: NodeLocator(::T, !Matched::T, ::T) 其中 T<:Union{ Int64,矢量 {Int64}} 位于 C:\Users\ivica.julia\packages\Parameters\MK0O4\src\Parameters.jl:526
Int64对于上下文,它们的构造包括将s按元素添加到NodeLocator.value,我认为发生的情况是,在第一步之后,该字段的类型被锁定Int64并且无法更改为Vector{Int64}。
如何参数化 的类型声明而NodeLocator.value不会遇到此错误?- 这样做有意义吗?我的主要问题是计算时间,因此性能对我来说非常重要。