2016-07-20 2 views
3

I 벡터를 표준과 함께 저장하려고한다고 가정합니다. 의도 한대로형식 정의의 매개 변수 형식의 기능

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 매개 변수를 악용하지 않아야합니다. 이 올바른지?

추신 : 이것은 문제를 설명하기 위해 작성된 예제입니다. 내가 직면하고있는 것은 실제 문제가 아닙니다. (나는 JuliaCon에서 제프 Bezanson와 문제를 논의 했더라도, 그는 그것을 고정 의무가 보였다) 유형 매개 변수 현재

+0

'심볼'로 저장하는 것이 어떻습니까? –

+0

설명해 주시겠습니까? – gTcV

+0

그 기능은 [기능을 표준으로 적용 할 수 있는지 여부] (http://docs.julialang.org/en/latest/stdlib/base/#Base.applicable)의 런타임 검사를 __constructor__하지만 타입에 넣을 수는 없습니다. –

답변

2

모든 계산은 를 작동하지 않습니다. 현재 문제는 norm의 표현식이 매개 변수화 된 유형이 정의되고 TypeVar과 함께 호출되면 평가되지만 아직 실제로 호출해야하는 값인 것은 아닙니다. 그 매개 변수가 실제로 구체적인 유형을 만들기 위해 바인딩 될 때.

나는 부동 소수점 유형의 비트 수에 대한 계산을하고 싶습니다. 즉, 특정 숫자의 fp 값을 저장하는 데 필요한 UInt의 수를 계산하여 사용하고 싶습니다. 정밀도를 유지하고 NTuple{N,UInt}을 사용하여 가수를 유지합니다.