假设我想将I vector与其规范一起存储。我希望相应的类型定义很简单:
immutable VectorWithNorm1{Vec <: AbstractVector}
vec::Vec
norm::eltype(Vec)
end
但是,这并没有按预期工作:
julia> fieldtype(VectorWithNorm1{Vector{Float64}},:norm)
Any
似乎我必须这样做
immutable VectorWithNorm2{Vec <: AbstractVector, Eltype}
vec::Vec
norm::Eltype
end
并依赖用户不滥用Eltype
参数。这是对的吗?
PS:这只是一个用来说明问题的示例。这不是我面临的实际问题。
答案 0 :(得分:2)
对类型参数当前的任何计算都不起作用
(虽然我确实在JuliaCon与Jeff Bezanson讨论过这个问题,但他似乎很容易修复它)。
目前的问题是,在定义参数化类型时会评估norm
类型的表达式,并使用TypeVar
进行调用,但它尚未绑定到某个值,这就是你真的需要它被调用,当时该参数实际上被绑定以创建一个具体的类型。
我经常遇到这个问题,我想对浮点类型的位数进行一些计算,即计算和使用存储a所需的UInt
个数。 fp特定精度的值,并使用NTuple{N,UInt}
来保存尾数。