Depending on how much performance you need, you could do something like:

_f(a::A, b::B, c::C) = ...

function f(args...)
  a,b,c = A(1),B(1),C(1)
  for arg in args
    T = typeof(arg)
    if T <: A
      a = arg
    elseif T <: B
      b = arg
    elseif T <: C
      c = arg
    end
  end
  _f(a,b,c)
end

And if you need to do this in multiple places, I'm sure you could turn this
into a macro fairly easily.


On Thu, Jan 7, 2016 at 2:02 PM, Josh Day <[email protected]> wrote:

> Suppose I have a function that takes several arguments of different types
> and each has a default value.  What is the best way to specify all possible
> methods where a user can specify an argument without entering the defaults
> that come before it?  I don't want to force a user to remember the exact
> order of arguments.  The example below may explain this better.
>
> type A
>     a::Int
> end
> type B
>     b::Int
> end
> type C
>     c::Int
> end
> f(a::A = A(1), b::B = B(1), c::C = C(1)) = ...
>
> I would like the user to be able to call  f(C(3), B(2))instead of f(A(1),
> B(2), C(3)).  I could just implement the factorial(3)methods myself, but
> if I want to do this for 5 types, it means I'm writing 120 methods.
>
> Is this just a terrible idea and I should use keyword arguments?
>

Reply via email to