我们说我有Union
:
SomeUnion = Union{Int, String}
是否有提取形成此联合的类型集合的方法?例如....
union_types(SomeUnion) # => [Int, String]
答案 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
类型有两个字段a
和b
,而不是单个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