禁止打印Julia中的自定义结构

问题描述 投票:0回答:1

我的结构最终有很多循环引用。它类似于:

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

printing julia structure
1个回答
0
投票

您需要使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重载打印内容>

© www.soinside.com 2019 - 2024. All rights reserved.