It occurs to me that, if you really need this, you can define sprintf(args...) = eval(:@sprintf($(args...)))
It's not pretty or ideal in terms of performance, but it will do the job. fmt = "%8.1e" sprintf(fmt, 3.141) #=> " 3.1e+00" On Sunday, 13 April 2014 22:47:12 UTC+1, Dominique Orban wrote: > > So what's the preferred Julia syntax to achieve what I meant here: > > julia> fmt = "%8.1e"; > julia> @sprintf(fmt, 3.1415) > ERROR: first or second argument must be a format string > > > > On Sunday, April 13, 2014 1:31:57 PM UTC-7, 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 <[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")))) >> > >> >>
