やはり,前の記事のは無理があるので,すっきりさせようと。
ただ,書式を与えられるようにと。
普通にやると動かないのは @printf() がマクロとはいえ,コンパイルされる関数で,fmt の部分に文字変数を指定しても動かない。それを回避するには @eval() を使うというヒントのページの助けを借りて以下のようなものを作った。
julia> using Printf
julia> function dumplist(name::String, object::Array{Float64,2}; fmt="%10.5f")
nr, nc = size(object)
println("----- $name -----")
for i = 1:nr
for j = 1:nc
@eval(@printf($fmt, $(object[i, j])))
end
print("\n")
end
end
dumplist (generic function with 1 method)
julia> x = [1.0 2 3; 4 5 6]
2×3 Array{Float64,2}:
1.0 2.0 3.0
4.0 5.0 6.0
julia> dumplist("name", x, fmt="%6.3f")
----- name -----
1.000 2.000 3.000
4.000 5.000 6.000
julia> dumplist("name", x, fmt="%6.3g")
----- name -----
1 2 3
4 5 6
出力が,パラパラパラ...と出てくるのが可笑しい。