2016-07-20 27 views
3

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:これは、この問題を説明する単なる例です。私が直面している実際の問題ではありません。 (私はJuliaConでジェフBezansonとの問題を議論しましたが、彼はそれを固定に適し見えた)タイプのパラメータ現在

+0

「シンボル」として保存するのはどうですか? –

+0

詳しいことはありますか? – gTcV

+0

これは、[関数を標準として適用できるかどうか](http://docs.julialang.org/ja/latest/stdlib/base/#Base.applicable)の実行時チェックを__constructor__ですが、型にはそれを課すことはできません –

答えて

2

任意の計算は を動作しません。 問題は現在、normの式は、パラメータ化された型が定義され、TypeVarで呼び出されたときに評価されますが、実際に呼び出す必要がある値にはまだバインドされていませんそのパラメータが実際に具体的な型を作成するためにバインドされている時点で

私は浮動小数点型のビット数を計算したい、つまり特定のfp値を格納するのに必要な数を計算して使用したいと思っています。精度を保ち、NTuple{N,UInt}を使用して仮数を保持します。

関連する問題