Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Generic dispatch with Symbols

I was wondering if there was a way to use Symbols for multiple dispatch, but also include a "catch-all method". i.e. something like

function dispatchtest{alg<:Symbol}(T::Type{Val{alg}})
  println("This is the generic dispatch. The algorithm is $alg")
end
function dispatchtest(T::Type{Val{:Euler}})
  println("This is for the Euler algorithm!")
end

The second one works and matches what's in the manual, I'm just wondering how you get the first one to work.

like image 946
Chris Rackauckas Avatar asked Sep 04 '16 08:09

Chris Rackauckas


Video Answer


1 Answers

You can do it this way:

julia> function dispatchtest{alg}(::Type{Val{alg}})
           println("This is the generic dispatch. The algorithm is $alg")
       end
dispatchtest (generic function with 1 method)

julia> dispatchtest(alg::Symbol) = dispatchtest(Val{alg})
dispatchtest (generic function with 2 methods)

julia> function dispatchtest(::Type{Val{:Euler}})
           println("This is for the Euler algorithm!")
       end
dispatchtest (generic function with 3 methods)

julia> dispatchtest(:Foo)
This is the generic dispatch. The algorithm is Foo

julia> dispatchtest(:Euler)
This is for the Euler algorithm!
like image 162
HarmonicaMuse Avatar answered Oct 19 '22 06:10

HarmonicaMuse