That kind of type specification has been on the wish list for a long time. 
Maybe when #8974 lands (certainly not in julia 0.5).

--Tim

On Wednesday, March 30, 2016 01:24:54 PM Tamas Papp wrote:
> Hi,
> 
> I am working on a mini-library that makes tabulation of arbitrary data
> easier. The design that works well at the moment is just wrapping a
> dictionary, which maps a Tuple of given type (and thus length) to a
> subtype of Real. The Tuple type gives the allowed key types.
> 
> It could be defined like this:
> 
> immutable DynamicNamedArray{Tv <: Real, Tk <: Tuple}
>     elements::Dict{Tk,Tv}
>     ordering
>     function DynamicNamedArray{Tk,Tv}(elements::Dict{Tk,Tv},
> ordering::NTuple) @assert nfields(Tk) == length(ordering)
>         new(elements, ordering)
>     end
> end
> 
> where ordering is another tuple, of functions, which is used for display
> and conversion to NamedArray.
> 
> But suppose I want to incorporate the length of the key tuple Tk into
> the type. I could use
> 
> immutable DynamicNamedArray{Tv <: Real, Tk <: Tuple, N}
>     elements::Dict{Tk,Tv}
>     ordering::NTuple{N,Function}
>     function DynamicNamedArray{Tk,Tv,N}(elements::Dict{Tk,Tv},
> ordering::NTuple{N}) @assert nfields(Tk) == N
>         new(elements, ordering)
>     end
> end
> 
> I can then make it a subtype of AbstractSparseArray{Tv,N}. But the
> constructor is still used to enforce nfields(Tk) == N. I am wondering if
> there is a way to do something like (mock code follows)
> 
> immutable DynamicNamedArray{N, Tv <: Real, Tk <: NTuple{N}}
>   ...
> end
> 
> so that the order would be enforced in the type.
> 
> If I am trying to do something nonsensical and better solutions exist,
> please tell me.
> 
> Best,
> 
> Tamas

Reply via email to