Julia:哪个环境变量/设置控制在 repl 中为数组打印的元素数量?

xia*_*dai 6 pretty-print read-eval-print-loop julia display

当我打印

rand(1_000_000)
Run Code Online (Sandbox Code Playgroud)

它打印第一N行并打印最后N一行。这是如何N确定的,我该如何控制N

在此处输入图片说明

NHD*_*aly 5

大小是由 计算的Base.displaysize(::IO),你可以看到它应该报告终端的大小stdout,并报告 IOBuffers 的“标准”大小:

julia> Base.displaysize(stdout)
(19, 81)


julia> Base.displaysize(IOBuffer())
(24, 80)

julia> Base.displaysize()
(24, 80)
Run Code Online (Sandbox Code Playgroud)

这在show()用于在 REPL 中显示数组的完整方法中调用: show(io::IO, ::MIME"text/plain", X::AbstractArray), inside print_matrix,这里:

    if !get(io, :limit, false)
        screenheight = screenwidth = typemax(Int)
    else
        sz = displaysize(io)
        screenheight, screenwidth = sz[1] - 4, sz[2]
    end
Run Code Online (Sandbox Code Playgroud)

https://github.com/NHDaly/julia/blob/879fef402835c1727aac52bafae686b5913aec2d/base/arrayshow.jl#L159-L164

请注意,尽管在该函数中,io实际上是一个IOContext,因此正如@Fengyang Wang 在此答案中所描述的:https : displaysize//stackoverflow.com/a/40794864/751061 ,如果您想控制它,您也可以在 IOContext 上手动设置你自己(为 julia 1.0 更新):

julia> show(IOContext(stdout, :limit=>true, :displaysize=>(10,10)), MIME("text/plain"), rand(1_000_000))
1000000-element Array{Float64,1}:
 0.5684598962187111
 0.2779754727011845
 0.22165656934386813
 ?
 0.3574516963850929
 0.914975294703998
Run Code Online (Sandbox Code Playgroud)

最后,为了关闭循环,在 REPL 处显示一个值变成show(io, MIME("text/plain"), v),通过displayhttps : //github.com/NHDaly/julia/blob/879fef402835c1727aac52bafae686b5913aec2d/base/multimedia.jl#L319