printing - 抑制 Julia 中自定义结构的打印
问题描述
我有一个结构,最终有很多循环引用。它类似于:
mutable struct Friend
a :: Int64
b :: Float64
your_best_friend :: Union{Nothing, Friend}
you_are_best_friend :: Union{Nothing, Friend}
Friend() = new()
end
任何两个彼此最好的朋友都会在打印时引起循环引用。Julia 处理这些循环引用,因此打印不会永远消失,但我宁愿在创建 Friend 结构的变量时根本不打印。我知道 supressor.jl 是一个东西,但我想知道 Base Julia 是否有一个固有的解决方案。基本上,是否有结构选项,以便在不使用额外包的情况下分配时不打印对象?如果不是,那么下一个最好的事情是什么?我不是 CS 人,所以我不确定打印需要什么样的计算时间,但如果可能的话我想避免它(而且我不确定 supressor.jl 是否会删除打印时间或者打印是否仍然需要额外的时间,但只是不显示)。这对我来说似乎很简单,但我做不到 t 在文档中找到解决方案。抱歉,如果很明显,请提前致谢!
-J
解决方案
您需要重载 Base.show 以更改 REPL 显示对象的方式:
julia> mutable struct Friend
a :: Int64
b :: Float64
your_best_friend :: Union{Nothing, Friend}
you_are_best_friend :: Union{Nothing, Friend}
Friend() = new()
end
julia> Friend()
Friend(0, 0.0, #undef, #undef)
julia> import Base.show
julia> show(io::IO, f::Friend) = show(io, "Friend $(f.a)")
show (generic function with 223 methods)
julia> d = Friend()
"Friend 0"
请注意,如果您还想更改 REPL 命令行之外的打印方式,您可能还需要通过import Base.print
推荐阅读
- flutter - Flutter:将 RawImage 转换为扩展 ImageProvider<> 的东西?
- unit-testing - thenReturn() 方法在模拟时抛出编译错误
- r - 如何在 R 中读取 .edges 文件?
- python - 如何使用 EZDXF 库添加不同比例的图像?
- c - 为什么 C 头文件 stdio.h 中 fopen 原型中的 (const char * ) 参数
- javascript - (JavaScript) 如何在 Phaser 3 中将图像定义为变量
- linux - 是否可以对 iproute tc 命令进行逆向工程?
- rust - unistd::read() 总是返回 0
- java - springboot如何发送400/500/404响应错误
- scala - 如何将 rdd 转换为 pairRDD 并合并两个数据集