As far as the macro is concerned, the splat isn’t executed: it’s just 
additional syntax that gets taken in as a whole expression.

The contrast between how a function with splatting works and how a macro with 
splatting works might be helpful:

julia> function splat(a, b...)
       println(a)
       println(b)
       return
       end
splat (generic function with 2 methods)

julia> splat(1, 2, 3)
1
(2,3)

julia> splat(1, [2, 3]...)
1
(2,3)

julia> macro splat(a, b...)
              println(a)
              println(b)
              :()
              end

julia> @splat(1, 2, 3)
1
(2,3)
()

julia> @splat(1, [2, 3]...)
1
(:([2,3]...),)
()


 — John

On Apr 13, 2014, at 1:20 PM, Jeff Waller <[email protected]> wrote:

> Likewise I am having problems with @sprintf
> 
> Is this because @sprinf is macro?  The shorthand of expanding a printf with 
> format the contents of an array is desirable.  I would have expected the ... 
> operator to take an array of length 2 and turn it into 2 arguments.
>    
>     julia> X=[1 2]
>    1x2 Array{Int64,2}:
>     1  2
> 
>     julia> @sprintf("%d%d",1,2)
>     "12"
> 
>     julia> @sprintf("%d%d",X...)
>     ERROR: @sprintf: wrong number of arguments
> 
>     julia> @sprintf("%d%d",(1,2)...)
>     ERROR: @sprintf: wrong number of arguments
> 
>     julia> @sprintf("%d",X...)
>     ERROR: error compiling anonymous: unsupported or misplaced expression ... 
> in function anonymous
>     in sprint at io.jl:460
>     in sprint at io.jl:464
> 
>     julia> macroexpand(quote @sprintf("%d%d",X...) end)
>     :($(Expr(:error, ErrorException("@sprintf: wrong number of arguments"))))
> 

Reply via email to