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

Ale*_*lec 9 printing types julia

说我有

struct MyStruct{T,U}
  a::T
  b::U
end
Run Code Online (Sandbox Code Playgroud)

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

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

z = MyStruct((a=1,b=2),rand(5))
Run Code Online (Sandbox Code Playgroud)

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

julia> typeof(z)
MyStruct{NamedTuple{(:a, :b), Tuple{Int64, Int64}}, Vector{Float64}}
Run Code Online (Sandbox Code Playgroud)

如何以编程方式将MyStructfrom放入z字符串中?

Nil*_*dat 11

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

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
Run Code Online (Sandbox Code Playgroud)