You also need to splat when calling boo. Adding and `@show` helps to see
what's going on:


julia> function foo(a, b, x...)
       @show x
       boo(x...)
       end
foo (generic function with 1 method)

julia> foo(1,2,z...)
x = (3,4)
12

Below does not work as x is a tuple of one tuple, which becomes a single
tuple after splatting in the boo call.

julia> foo(1,2,z)
x = ((3,4),)
ERROR: MethodError: `boo` has no method matching boo(::Tuple{Int64,Int64})
Closest candidates are:
  boo(::Any, ::Any)
 in foo at none:3


On Tue, 2016-02-23 at 12:59, Alex <[email protected]> wrote:
> Hi all,
>
> Why the following code doesn't work?
>
> function boo(x, y)
>   x*y
> end
>
>
> function foo(a, b, x...)
>   boo(x)
> end
>
> z=3,4
>
> foo(1,2,z)
> foo(1,2,z...)
>
> ERROR: LoadError: MethodError: `boo` has no method matching boo(::Tuple{Tuple{
> Int64,Int64}})
>
> According to the documentation:
>
>
>     it is often handy to “splice” the values contained in an iterable
>     collection into a function call as individual arguments.
>
>     To do this, one also uses ... but in the function call instead
>
>
> I used ... in a function call, but it doesn't help.

Reply via email to