2015-07-27 3 views

risposta

5

basta scrivere un semplice esempio qui:

a = Union(Int,String) 

function union_types(x) 
    return x.types 
end 

julia> union_types(a) 
(Int64,String) 

È possibile memorizzare il risultato in un array se si desidera:

function union_types(x) 
    return collect(DataType, x.types) 
end 

julia> union_types(a) 
2-element Array{DataType,1}: 
Int64 
String 

UPDATE: l'uso collect come suggerito da @Luc Danton nel commento seguente.

+3

'raccogliere (DataType, a.types)' può essere un modo conciso per, bene, raccogliere i tipi in una matrice. –

+0

@Gnimuc Key, grazie mille! –

+0

@LucDanton usando 'collect' è così elegante! Ho aggiornato la mia risposta come suggerito. – Gnimuc

1

Per Julia 0.6, NEWS.md afferma che "Union tipi hanno due campi, a e b, invece di un singolo types campo". Inoltre, "I tipi parametrici con parametri" non specificati ", ad esempio Array, sono ora rappresentati come tipi UnionAll invece di DataType s".

Così, per ottenere i tipi come una tupla, si può fare

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

Se si desidera un array, basta collect la tupla

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