That's pretty cool, but I have a followup.

Does this mean
1) Writing macros is implicitly harder because they don't deal with 
(splatted) collections as easy as functions?
2) This is not really important because it hardly is ever done?
3) sprintf should be re-written as a function?
4) sprintf should be modified to deal with this?
5) sprintf can't be modified easily to deal with this and still be 
efficient (see #1-#3)

On Sunday, April 13, 2014 4:31:57 PM UTC-4, John Myles White wrote:
>
> 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 <trut...@gmail.com <javascript:>> 
> 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