I never could tell my shapes apart. Nearly failed kindergarten because all my 
lines had 3 corners.

--Tim

On Saturday, July 16, 2016 4:20:04 AM CDT Patrick Kofod Mogensen wrote:
> 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 <dawb...@gmail.com
> > 
> > <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