You could also use a fairly common (although it is discouraged in the style guide <http://docs.julialang.org/en/release-0.4/manual/style-guide/?highlight=style#avoid-confusion-about-whether-something-is-an-instance-or-a-type>) construct with an “enum type tree”:
abstract SolverMethod immutable Spearman end immutable Pearson end immutable Kendall end Now, you can define and use your function definition like this: function foo{Method<:SolverMethod}(x, method::Type{Method}) ... end foo(x, Kendall) # solve using Kendall solver Furthermore, you can leverage multiple dispatch for parts of the function that differ based on the solver method. Inside foo, this if method == "spearman" # do spearman specific stuff elseif method == "pearson" # do pearson specific stuff elseif method == "kendall" # do kendall specific stuff else # handle incorrect input end turns into dostuff(..., method) # and outside of foo function dostuff(..., ::Type{Spearman}) # do spearman specific stuff end function dostuff(..., ::Type{Pearson}) # do pearson specific stuff end function dostuff(..., ::Type{Kendall}) # do kendall specific stuff end //T On Tuesday, September 15, 2015 at 10:32:39 AM UTC+2, Mauro wrote: No, Julia only dispatches on types not on values. The latter sometimes > goes under the name of pattern matching. There is a package for that: > https://github.com/toivoh/PatternDispatch.jl > > On Tue, 2015-09-15 at 10:15, Michael Borregaard <mkborr...@gmail.com > <javascript:>> wrote: > > Is there a way in julia to restrict the values of arguments to a > function, > > eg to the contents of a certain vector? > > > > So, e.g. method in the function > > > > function foo(x, method::String) ... > > > > would be constrained to either "spearman", "pearson" or "kendall"? > > > > Thanks > >