Thanks, that looks interesting, I will check out the Parameters.jl package!
On Wed, Jan 6, 2016 at 9:03 AM, Mauro <mauro...@runbox.com> wrote: > > OK, so that is the long way to do it. > > I just thought that, since multiple dispatch does not work on keyword > > arguments, they should by definition be the same for all methods, no? > > Otherwise you end up with keyword arguments throwing an error because the > > type of a different argument changing, an error that is hard to debug > > because the kwargs do not show up under a methods(foo) call. Seems to me > > such a potentially ripe source of bugs that julia would have an inbuilt > (or > > at least recommended ideomatic) way of dealing with it. > > No, I don't think that would help either as keywords are not necessarily > the same for different methods. What you can do is: > > f(x,y; kws...) = (deal_with_kws(kws); ...) > > Or use metaprogramming to make sure all you keywords are the same. > > You should consider using an option structure. I think Parameters.jl > can help with that: > > @with_kw immutable Opts > t=5 > u=9 > end > > f(x,y, opts=Opts()) = ... > f(x, opts=Opts()) = ... > ... > > # call with default opts > f(x,y) > # call with non-default opts > f(x,y, Opts(t=7)) > > > Den onsdag den 6. januar 2016 kl. 00.09.10 UTC+1 skrev Jeffrey Sarnoff: > >> > >> If you want all methods to use the same keyword arguments, define each > >> method with the same keyword arguments. You can declare keyword > arguments' > >> types. > >> > >> function foo(a::Int; test::Bool = true) > >> if test > >> a > >> else > >> 0 > >> end > >> end > >> > >> function foo(a::AbstractFloat; test::Bool = true) > >> if test > >> a > >> else > >> 100.0 > >> end > >> end > >> > >> foo(1) > >> 1 > >> foo(1,false) > >> 0 > >> foo(1,"grue") > >> ERROR > >> > >> foo(1.0) > >> 1.0 > >> foo(1.0,false) > >> 100.0 > >> foo(1.0,"grue") > >> ERROR > >> > >> > >> > >> On Tuesday, January 5, 2016 at 4:30:14 PM UTC-5, Michael Borregaard > wrote: > >>> > >>> Hi, sorry I have a simple question, I have tried to RTFM. > >>> > >>> If I have a function with multiple methods and keyword arguments, all > >>> methods should share the same keyword args, right? How do I write this? > >>> > >>> function foo(a::Int; test = true) > >>> 2+a > >>> end > >>> > >>> function foo(a::AbstractFloat #how do I continue this line? > >>> > >>> In my real-world example I have multiple methods and a long list of > >>> keyword arguments. > >>> > >>> Thanks! > >>> > >> >