有时候,访问类型的非参数化版本会很有帮助。例如,如果我有一些
foo::Foo{A,B}
,那么像basetype(foo::Foo{args...}) = Foo
这样的东西会很好。Julia是否提供类似的功能?foo::Foo{A,B}
,那么像basetype(foo::Foo{args...}) = Foo
这样的东西会很好。Julia是否提供类似的功能?您可以在参数类型中使用Base.typename
。它以Core.TypeName
的形式返回类型名称,您可以使用其wrapper
字段提取类型。
julia> Base.typename(typeof([1])).wrapper
Array
julia> Base.typename(Array{Int64, 1}).wrapper
Array
T.name.wrapper
直接检索此信息,这可能会由 Julia 进行更好的优化,尽管这并不是一个好主意。请参阅相关问题此处。如果您只需要一个字符串/符号表示,您也可以使用:
julia> nameof(Array{Int64, 1}
:Array
julia>nameof(Foo{A,B})
:Foo