If this were Facebook, I would "Like" this :)

On Wednesday, September 23, 2015 at 9:34:27 AM UTC+8, Tim Holy wrote:
>
> At the risk of encouraging emacs users to "fix" the syntax with ctrl-T, 
> I'd 
> propose the following (apparently complete?) solution: 
>
>
> immutable FormatString{S} end 
>
> FormatString(str::AbstractString) = FormatString{symbol(str)} 
>
> macro f_str(arg) 
>     :(FormatString{symbol($arg)}) 
> end 
>
> @generated function Base.print{format}(::Type{FormatString{format}}, 
> args...) 
>     meta = Expr(:meta, :inline) 
>     fmt = string(format) 
>     allargs = [:(args[$d]) for d = 1:length(args)] 
>     quote 
>         @printf($fmt, $(allargs...)) 
>     end 
> end 
>
>
>
> Demo: 
> julia> print(f"%.3f", pi) 
> 3.142 
> julia> function foo(strs) 
>            for str in strs 
>                print(FormatString(str), pi) 
>            end 
>        end 
> foo (generic function with 1 method) 
>
> julia> strs = ("%.3f\n", "%.5f\n") 
> ("%.3f\n","%.5f\n") 
>
> julia> foo(strs) 
> 3.142 
> 3.14159 
>
> julia> @time 1   # just to warm up @time 
>   0.000004 seconds (148 allocations: 10.151 KB) 
> 1 
>
> julia> @time foo(strs) 
> 3.142 
> 3.14159 
>   0.000106 seconds (18 allocations: 704 bytes) 
>
>
> Nice that we get to re-use the macro that Stefan worked so hard on! 
>
> Best, 
> --Tim 
>

Reply via email to