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

Reply via email to