是否有可能获得什么形式的联合类型的集合?

时间:2015-07-27 00:43:01

标签: julia

我们说我有Union

    SomeUnion = Union{Int, String}

是否有提取形成此联合的类型集合的方法?例如....

    union_types(SomeUnion) # => [Int, String]

3 个答案:

答案 0 :(得分:5)

在这里写一个简单的例子:

getcategory()

如果需要,可以将结果存储到数组中:

a = Union(Int,String)

function union_types(x)
  return x.types
end

julia> union_types(a)
(Int64,String)

更新:使用function union_types(x) return collect(DataType, x.types) end julia> union_types(a) 2-element Array{DataType,1}: Int64 String 作为@Luc Danton在下面的评论中提出。

答案 1 :(得分:2)

对于Julia 0.6,NEWS.md声明" Union类型有两个字段ab,而不是单个types字段&#34 ;。此外,"参数类型与"未指定"参数(例如Array)现在表示为UnionAll类型,而不是DataType s"。

因此,要将类型作为元组,可以做

union_types(x::Union) = (x.a, union_types(x.b)...)
union_types(x::Type) = (x,)

如果你想要一个数组,只需要collect元组

julia> collect(union_types(Union{Int, Float64, String, Array}))
4-element Array{Type,1}:
 Int64  
 Float64
 String
 Array

答案 2 :(得分:0)

Base.uniontypes 没有记录(从 julia-1.6.1 开始),所以要小心使用。 但它有效:

julia> SomeUnion = Union{Int, String}
Union{Int64, String}

julia> Base.uniontypes(SomeUnion)
2-element Vector{Any}:
 Int64
 String