É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?
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.
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.