#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]]