gpt4 book ai didi

julia - 对于 Julia 中的自定义类型,如何阻止 `show` 打印其完全限定名称?

转载 作者:行者123 更新时间:2023-12-02 19:41:08 28 4
gpt4 key购买 nike

假设我有一个类型 X,并且我重载了它的 show()。当类型名称出现在其他上下文中时,例如在数组中,它仍然打印完全限定名称:

julia> module M
struct X
x
end

Base.show(io::IO, x::X) = print(io, "X($(x.x))")

println([X(1),X(2)])
end
Main.M.X[X(1), X(2)]
Main.M

重载 show(::IO, Type{X}) 来停止这样做是不是很糟糕?有没有办法仅在某些上下文中执行此操作(例如,如果它嵌套在同一模块中的另一个对象内)?

julia> module M
struct X
x
end

# NOTE: Here I ONLY overload the Type printing, because the rest of the default behavior works great.
Base.show(io::IO, x::Type{X}) = print(io, "X")

println([X(1),X(2)])
end
X[X(1), X(2)]
Main.M

最佳答案

当创建自定义类型(如struct)时,自定义类型的作者通常会提供专用于该类型的Base.show 版本。这是一个值得遵循的良好模式:

struct MyString
s::String
end

mystring = MyString("my string") # shows: MyString("my string")

# this is used to handle a call to `print`
Base.show(io::IO, x::MyString) = print(io, x.s)
# this is used to show values in the REPL and when using IJulia
Base.show(io::IO, m::MIME"text/plain", x::MyString) = print(io, x.s)

mystring = MyString("my string") # shows: my string
print(mystring) # shows: "my string"
mystring = MyString("my string") # shows: MyString("my string")

此信息来自 Steven G. Johnson 编写的 Discourse 条目

关于julia - 对于 Julia 中的自定义类型,如何阻止 `show` 打印其完全限定名称?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60107220/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com