web-dev-qa-db-fra.com

Comment obtenir des champs d'un objet Julia

Étant donné un objet Julia de type composite, comment déterminer ses champs?

Je connais une solution si vous travaillez dans le REPL: Tout d'abord, vous déterminez le type de l'objet via un appel à typeof, puis entrez en mode d'aide (?), puis recherchez le type. Existe-t-il une manière plus programmatique de réaliser la même chose?

16
Yly

Pour v0.7 +

Utilisez fieldnames(x), où x est un DataType. Par exemple, utilisez fieldnames(Date), au lieu de fieldnames(today()), ou bien utilisez fieldnames(typeof(today())) .

Cela renvoie Vector{Symbol} Répertoriant les noms de champ dans l'ordre.

Si un nom de champ est myfield, pour récupérer les valeurs de ce champ, utilisez soit getfield(x, :myfield), soit la syntaxe de raccourci x.myfield.

Une autre fonction utile et connexe avec laquelle jouer est dump(x).

Avant v0.7

Utilisez fieldnames(x), où x est soit une instance du type composite qui vous intéresse, soit un DataType. Autrement dit, fieldnames(today()) et fieldnames(Date) sont également valides et ont la même sortie.

24
Colin T Bowers

supposons que l'objet soit obj,

vous pouvez obtenir toutes les informations de ses champs avec l'extrait de code suivant:

T = typeof(obj)
for (name, typ) in Zip(fieldnames(T), T.types)
    println("type of the fieldname $name is $typ")
end

Ici, fieldnames(T) renvoie le vecteur des noms de champs et T.types Renvoie le vecteur correspondant du type des champs.

3
novatena