On Thursday, July 14, 2016 at 10:14:38 PM UTC+2, Tim Holy wrote:
>
> *Until we get "diagonal dispatch,"* I think the only way to do this is to 
> expand 
> the number of arguments in the function: 
>

Triangular dispatch, right? Diagonal dispatch is exactly what we have :)
 

> myfunc(vec::Vector) = _myfunc(eltype(vec), vec)  # internal function 
> _myfunc{D<:Dict{ASCIIString}}(::Type{D}, vec) = 1 
> _myfunc{D}(::Type{D}, vec) = 2 
>
> julia> myfunc([Dict("a"=>1), Dict("b"=>1.0)]) 
> 1 
>
> julia> myfunc([Dict(1=>:hello), Dict(2=>:world)]) 
> 2 
>
> Best, 
> --Tim 
>
> On Thursday, July 14, 2016 1:05:20 PM CDT Yichao Yu wrote: 
> > On Thu, Jul 14, 2016 at 12:41 PM, David Barton <[email protected] 
> <javascript:>> wrote: 
> > > Hi, 
> > > 
> > > I'm trying to write a function that accepts a vector of values that 
> are of 
> > > the same (overall) type but with different parameterisations. As a 
> simple 
> > > example, consider the vector = [Dict("a"=>1), Dict("b"=>1.0)]. I can 
> > > easily 
> > > use a function along the lines of 
> > > 
> > > function myfunc(vec::Vector{Dict}) 
> > > 
> > >   # do something 
> > > 
> > > end 
> > > 
> > > but I'd like to be able to restrict the parameterisation slightly so 
> that 
> > > the first parameter of the Dict type is an ASCIIString (not my actual 
> use 
> > > case but follows exactly the same pattern). I've tried doing something 
> > > like 
> > > 
> > > function myfunc{T}(vec::Vector{Dict{ASCIIString, T}}) 
> > > 
> > >   # do something 
> > > 
> > > end 
> > > 
> > > but this seems to enforce the condition that all the Dicts in the 
> vector 
> > > have the same parametric type T (so my example of 
> myfunc([Dict("a"=>1), 
> > > Dict("b"=>1.0)]) fails). Is there any way of expressing this 
> constraint? 
> > > Or 
> > 
> > The issue is the type of `[Dict("a"=>1), Dict("b"=>1.0)]` It has type 
> > `Vector{Dict{String}}` which cannot be matched by the signature you 
> > provide. I'm not sure if there's currently a clean way to be able to 
> > match this type in additional to the more strict types. 
> > 
> > > will I just have to use the first form of myfunc with some extra 
> checking 
> > > in the function body? 
> > > 
> > > Thanks 
> > > David 
>
>
>

Reply via email to