#author("2018-10-13T16:38:53+09:00","default:Miyashita","Miyashita")
#author("2018-10-13T16:39:08+09:00","default:Miyashita","Miyashita")
*@printf, @sprintfのフォーマットに変数を使用 [#xd8cd5fd]
[[Printf>https://docs.julialang.org/en/v1/stdlib/Printf/index.html]].@printfとPrintf.@sprintfは,
#codeprettify{{
@printf([io::IOStream], "%Fmt", args...)
@sprintf("%Fmt", args...)
}}
の型をとるが,この"%Fmt"に変数(String)を入れるとエラーになる.
#codeprettify{{
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を噛ませると使える.
#codeprettify{{
julia> @eval @printf($fmt,100)
100.0
}}
これをfunctionにしたら便利.
#codeprettify{{
print_formatted(fmt, args...) = @eval @printf($fmt, $(args...))
}}

***参考 [#r2653efa]
-[[Printf with variable format string>https://discourse.julialang.org/t/printf-with-variable-format-string/3805/2]]

Front page   Edit Diff Attach Copy Rename Reload   New List of pages Search Recent changes   Help   RSS of recent changes