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