Printing 抑制Julia中自定义结构的打印
我有一个结构,最终有很多循环引用。它类似于:Printing 抑制Julia中自定义结构的打印,printing,julia,structure,Printing,Julia,Structure,我有一个结构,最终有很多循环引用。它类似于: mutable struct Friend a :: Int64 b :: Float64 your_best_friend :: Union{Nothing, Friend} you_are_best_friend :: Union{Nothing, Friend} Friend() = new() end 任何两个人谁是最好的朋友彼此将导致循环引用时,这是打印
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结构的变量时不打印。我知道suppressor.jl是一个东西,但我想知道Base Julia是否有一个固有的解决方案。基本上,是否有一个用于结构的选项,以便在分配对象时不使用额外的包而不打印该对象?如果没有,下一个最好的办法是什么?我不是一个CS的家伙,所以我不确定打印需要什么样的计算时间,但如果可能的话,我想避免它(我不确定suppressor.jl是否会删除打印时间,或者打印是否仍然需要额外的时间,但只是不显示)。这对我来说似乎很简单,但我在文档中找不到解决方案。抱歉,如果这是显而易见的,请提前感谢
-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超负荷打印。打印,这很有效!完美回答了我的问题,在结构定义下放入模块即可。非常感谢!对于未来来说,这也是一个很好的工具。