You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让Julia中的@info宏打印完整数组而非折叠形式?

在Julia中让@info完整打印数组的方法

使用@info宏记录日志时,数组会被折叠成列形式显示,完全不利于日志查看。以下是满足「不全局重写默认print/show函数、尽量不粗暴转字符串」要求的解决方案:

方法1:自定义紧凑显示的数组包装类型

这种方法仅对包装后的数组生效,不会修改全局的数组显示逻辑,同时保留数组的类型特性(不是字符串)。

先定义包装类型及对应的显示方法:

# 定义包装类型,继承原数组的接口
struct CompactArray{T,N,A<:AbstractArray{T,N}} <: AbstractArray{T,N}
    arr::A
end

# 继承数组的核心接口,保证包装后的数组能正常使用
Base.size(x::CompactArray) = size(x.arr)
Base.getindex(x::CompactArray, i...) = getindex(x.arr, i...)
Base.setindex!(x::CompactArray, v, i...) = setindex!(x.arr, v, i...)

# 自定义show方法,让数组以单行紧凑形式完整显示
function Base.show(io::IO, x::CompactArray)
    show(IOContext(io, :compact => true, :limit => false), x.arr)
end

之后在@info里用这个类型包装数组即可:

H = (; up_sharpness = 20.0, soft_abs_eps = 0.01, vh_a = 0.10352)
R = [0.01229, 0.825731, 6.232608, -0.062631, 0.017161, 0.765596, 2.826992, 0.100005, 2.553098]
Q = (; a = 0.01229, p = 0.825731, ν = 6.232608, λ = -0.062631)

@info("found",
  H = H,
  R = CompactArray(round.(R, digits=6)),
  Q = round(Q, digits=6),
)

运行后就能得到期望的输出:

┌ Info: found
│   H = (up_sharpness = 20.0, soft_abs_eps = 0.01, vh_a = 0.10352)
│   R = [0.01229, 0.825731, 6.232608, -0.062631, 0.017161, 0.765596, 2.826992, 0.100005, 2.553098]
└   Q = (a = 0.01229, p = 0.825731, ν = 6.232608, λ = -0.062631)

方法2:用repr函数指定显示上下文

如果不想定义新类型,可以用repr函数通过上下文参数控制显示格式,这种方式不会全局修改默认行为,生成的是格式准确的字符串:

@info("found",
  H = H,
  R = repr(round.(R, digits=6), context=(:compact => true, :limit => false)),
  Q = round(Q, digits=6),
)

这种方法比直接用string更灵活,能精准控制数组的显示样式,也符合要求。

内容的提问来源于stack exchange,提问作者Alex Craft

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.12 01:27:32