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超负荷打印。打印

,这很有效!完美回答了我的问题,在结构定义下放入模块即可。非常感谢!对于未来来说,这也是一个很好的工具。