我的结构最终有很多循环引用。它类似于:
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是否会删除打印时间或打印是否仍会花费时间多余的时间,但不会显示)。这对我来说似乎很简单,但是我在文档中找不到解决方案。抱歉,很明显,在此先感谢!
-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
重载打印内容>