参数类型在类型定义中的作用

时间:2016-07-20 17:39:42

标签: julia

假设我想将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:这只是一个用来说明问题的示例。这不是我面临的实际问题。

1 个答案:

答案 0 :(得分:2)

对类型参数当前的任何计算都不起作用 (虽然我确实在JuliaCon与Jeff Bezanson讨论过这个问题,但他似乎很容易修复它)。 目前的问题是,在定义参数化类型时会评估norm类型的表达式,并使用TypeVar进行调用,但它尚未绑定到某个值,这就是你真的需要它被调用,当时该参数实际上被绑定以创建一个具体的类型。

我经常遇到这个问题,我想对浮点类型的位数进行一些计算,即计算和使用存储a所需的UInt个数。 fp特定精度的值,并使用NTuple{N,UInt}来保存尾数。