2016-07-20 7 views
3

Angenommen, ich möchte den Vektor zusammen mit seiner Norm speichern. Ich erwartete die entsprechende Typdefinition zu sein einfach:Funktion des Parametertyps in der Typdefinition

immutable VectorWithNorm1{Vec <: AbstractVector} 
    vec::Vec 
    norm::eltype(Vec) 
end 

Dies ist jedoch nicht wie beabsichtigt funktioniert:

julia> fieldtype(VectorWithNorm1{Vector{Float64}},:norm) 
Any 

Es scheint, ich

immutable VectorWithNorm2{Vec <: AbstractVector, Eltype} 
    vec::Vec 
    norm::Eltype 
end 

und verlassen sich auf zu tun haben der Benutzer den Parameter Eltype nicht missbrauchen. Ist das richtig?

PS: Dies ist nur ein erfundenes Beispiel zur Veranschaulichung des Problems. Es ist nicht das eigentliche Problem, vor dem ich stehe.

+0

Wie wäre es, es als 'Symbol' zu speichern? –

+0

Könnten Sie das näher erläutern? – gTcV

+0

Die Sache ist, dass Sie Laufzeitprüfung von [ob die Funktion als Norm angewendet werden kann] (http://docs.julaulang.org/en/latest/stdlib/base/#Base.applicable) in der __constructor__, aber Sie können das im Typ –

Antwort

2

Alle Berechnungen auf einen Typparameter derzeit funktionieren nicht (obwohl ich das Problem mit Jeff Bezanson bei JuliaCon diskutieren tat, und er schien Festsetzung es zugänglich). Das Problem ist derzeit, dass der Ausdruck für den Typ norm ausgewertet wird, wenn der parametrisierte Typ definiert ist, und mit einem TypeVar aufgerufen wird, aber es ist noch nicht an einen Wert gebunden, der Sie tatsächlich mit es aufgerufen werden muss , zu dem Zeitpunkt, zu dem dieser Parameter tatsächlich einen konkreten Typ erzeugen soll.

Ich habe in diese eine Menge, wo ich einige Berechnungen über die Anzahl der Bits eines Fließkomma-Typ zu tun, dh um die Anzahl der UInt s benötigt, um einen fp-Wert eines bestimmten zu speichern Präzision, und verwenden Sie eine NTuple{N,UInt}, um die Mantisse zu halten.