a= zeros(4,4)
Run Code Online (Sandbox Code Playgroud)
a像这样打印
> 4×4 Array{Float64,2}:
> 0.0 0.0 0.0 0.0
> 0.0 0.0 0.0 0.0
> 0.0 0.0 0.0 0.0
> 0.0 0.0 0.0 0.0
Run Code Online (Sandbox Code Playgroud)
但println(a)像这样打印
[0.0 0.0 0.0 0.0; 0.0 0.0 0.0 0.0; 0.0 0.0 0.0 0.0; 0.0 0.0 0.0 0.0]
Run Code Online (Sandbox Code Playgroud)
如何a在函数中以前一种方式“打印” ?我想要它用于调试目的。
Bog*_*ski 16
使用display(x).
让我在这里评论一下这里发生的事情。正如您在文档中所见,关键区别在于show(io, x)和之间show(io, mime, x):
帮助?> show(stdout, a) show([io::IO = stdout], x)
将值 x 的文本表示写入输出流 io。新类型 T 应该重载 show(io::IO, x::T)。show 使用的表示通常包括特定于 Julia 的格式和类型信息,并且应该是可解析的 Julia 代码(如果可能)。
repr 将 show 的输出作为字符串返回。
要为类型 T 的对象自定义人类可读的文本输出,请改为定义 show(io::IO, ::MIME"text/plain", ::T) 。建议在此类方法中检查 io 的 :compact IOContext 属性,因为某些容器通过使用 :compact => true 调用此方法来显示其元素。
所以:
show 不使用 MIME 写入对象的文本表示,show with MIME 尝试生成人类可读的格式。现在print(io, x)回退到show(io, x)你在这里看到的:
function print(io::IO, x)
lock(io)
try
show(io, x)
finally
unlock(io)
end
return nothing
end
Run Code Online (Sandbox Code Playgroud)
并且display在默认情况下REPL回落到show(io, mime, a):
function display(d::REPLDisplay, mime::MIME"text/plain", x)
io = outstream(d.repl)
get(io, :color, false) && write(io, answer_color(d.repl))
if isdefined(d.repl, :options) && isdefined(d.repl.options, :iocontext)
# this can override the :limit property set initially
io = foldl(IOContext, d.repl.options.iocontext,
init=IOContext(io, :limit => true, :module => Main))
end
show(io, mime, x)
println(io)
nothing
end
Run Code Online (Sandbox Code Playgroud)
(在这两种情况下,我都从 Base 中复制了定义,您最终会使用默认print(a)和display(a)操作 - 跳过过程中调用的方法)
你可以找到更多关于它的信息,这里的朱莉娅手册。
所以在你的情况下 - 正如君天建议你可以使用display. 也只是为了表明这一切都归结为show:
julia> a = zeros(4,4);
julia> show(stdout, a)
[0.0 0.0 0.0 0.0; 0.0 0.0 0.0 0.0; 0.0 0.0 0.0 0.0; 0.0 0.0 0.0 0.0]
julia> show(stdout, "text/plain", a)
4×4 Array{Float64,2}:
0.0 0.0 0.0 0.0
0.0 0.0 0.0 0.0
0.0 0.0 0.0 0.0
0.0 0.0 0.0 0.0
Run Code Online (Sandbox Code Playgroud)
有时您想保存显示大小和类型的那一行。因此,另一个值得注意的选择是DelimitedFiles:
julia> a= zeros(4,4);
julia> using DelimitedFiles; writedlm(stdout, a)
0.0 0.0 0.0 0.0
0.0 0.0 0.0 0.0
0.0 0.0 0.0 0.0
0.0 0.0 0.0 0.0
Run Code Online (Sandbox Code Playgroud)