@printf, @sprintfのフォーマットに変数を使用

Printf.@printfとPrintf.@sprintfは,

@printf([io::IOStream], "%Fmt", args...)
@sprintf("%Fmt", args...)

の型をとるが,この"%Fmt"に変数(String)を入れるとエラーになる.

julia> using Printf: @printf, @sprintf

julia> @printf("%0.1f", 100)
100.0

julia> fmt = "%0.1f";
julia> @printf(fmt, 100)
ERROR: LoadError: ArgumentError: @printf: first or second argument must be a format string
Stacktrace:
 [1] @printf(::LineNumberNode, ::Module, ::Symbol, ::Vararg{Any,N} where N) at /usr/local/julia/usr/share/julia/stdlib/v1.0/Printf/src/Printf.jl:39
in expression starting at none:1

ただし,@evalを噛ませると使える.

julia> @eval @printf($fmt,100)
100.0

これをfunctionにしたら便利.

print_formatted(fmt, args...) = @eval @printf($fmt, $(args...))

参考


Front page   Edit Diff Attach Copy Rename Reload   New List of pages Search Recent changes   Help   RSS of recent changes
Last-modified: 2018-10-13 (Sat) 07:38:53 (2182d)