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"))))
>