在 Julia 中获取类型的简单名称?

Get simple name of type in Julia?

说我有

struct MyStruct{T,U}
  a::T
  b::U
end

我想定义一个自定义 show 以消除完整类型中的大量噪音。

例如如果我创建以下内容:

z = MyStruct((a=1,b=2),rand(5))

然后 typeof 显示的比我想要的多得多:

julia> typeof(z)
MyStruct{NamedTuple{(:a, :b), Tuple{Int64, Int64}}, Vector{Float64}}

如何以编程方式将 MyStructz 转换为字符串?

关于 Discourse here and here 的一些冗长讨论,至少提供了这两个解决方案(第二个概括了第一个):

julia> Base.typename(typeof(z)).wrapper
MyStruct

julia> name(::Type{T}) where {T} = (isempty(T.parameters) ? T : T.name.wrapper)
name (generic function with 1 method)

julia> name(typeof(z))
MyStruct