You may have required arguments after the splat argument. Optional arguments must come before the splat character.
The pseudo-regular expression for parameter lists in Ruby looks something like this:
mand* opt* splat? mand* (mand_kw | opt_kw)* kwsplat? block?
Here is an example:
def foo(m1, m2, o1=:o1, o2=:o2, *splat, m3, m4, ok1: :ok1, mk1:, mk2:, ok2: :ok2, **ksplat, &blk) Hash[local_variables.map {|var| [var, eval(var.to_s)] }] end method(:foo).arity
Jörg W Mittag
source share