获得无参数类型

Chr*_*kas 5 types julia

我需要获得一个类型的无参数版本.例如,假设我有x = [0.1,0.2,0.3].然后typeof(x)==Array{Float64,1}.我如何创建一个函数(或存在一个函数?)parameterless_type(x) == Array?我需要以通用形式获取它,以便访问没有类型参数的构造函数.

tim*_*tim 2

这似乎适用于 0.5

\n\n
julia> typeof(a)\nArray{Float64,1}\n\njulia> (typeof(a).name.primary)([1 2 3])\n1\xc3\x973 Array{Int64,2}:\n1  2  3\n
Run Code Online (Sandbox Code Playgroud)\n\n

编辑1:

\n\n

感谢 tholy 的评论和ColorTypes.jl软件包,0.6 的解决方案是:

\n\n
julia> (typeof(a).name.wrapper)([1 2 3])\n1\xc3\x973 Array{Int64,2}:\n 1  2  3\n
Run Code Online (Sandbox Code Playgroud)\n\n

编辑2:

\n\n

王凤阳让我相信,使用typename是必要的。特别是,Array{Int}.name在 0.6 上失败,因为Array{Int}现在类型为UnionAll。适用于 0.5 和 0.6 的定义是

\n\n
using Compat.TypeUtils: typename\n\nif :wrapper in fieldnames(TypeName)\n    parameterless_type(T::Type) = typename(T).wrapper\nelse\n    parameterless_type(T::Type) = typename(T).primary\nend\n\nparameterless_type(x) = parameterless_type(typeof(x))\n
Run Code Online (Sandbox Code Playgroud)\n\n

如此一来,就是

\n\n
parameterless_type([0.1,0.2,0.3]) == Array\nparameterless_type(Array{Int}) == Array\n
Run Code Online (Sandbox Code Playgroud)\n