Using the same print_args, here's a revised arg_collector:

~~~~
julia> function arg_collector(;kwargs...)

           # do some operation on args

           print_args(;kwargs...) #always print args
       end
arg_collector (generic function with 1 method)

julia> arg_collector(x=5, y=6, z=7)
x 5 y 6 z 7
~~~~

You need the `...` to splice the varargs into the function call, and you
need to put them after the `;` in the call to make the keyword arguments
(rather than normal varargs).

-- Leah



On Wed, Jun 18, 2014 at 4:36 PM, Steve Kelly <kd2...@gmail.com> wrote:

> I have the following code that takes some keywords and does some
> operations. This is for a wrapper for Gcode (talking to 3D printers), so
> I'd like to specify an arbitrary axis to control. Below is what I would
> like to do.
>
> function print_args(;args...)
>>     # do some formatting
>>     str = ""
>>     for (key, val) in args
>>         str *= string(key, " " , val, " ")
>>     end
>>     println(str)
>> end
>>
>> function arg_collector(;args...)
>>
>>     # do some operation on args
>>
>
>     print_args(args) #always print args
>> end
>>
>> arg_collector(x=5, y=6, z=7)
>>
>
>  The obvious work around seems to be to dispatch onto a
> print_args(x::Array{Any,1}) and handle the formatting there. I'm not
> inclined to do that since it creates redundant code.
>
> Is there a succinct way to re-pass the keyword arguments to another
> function expecting only keyword arguments?
>
>

Reply via email to