La portée initiale d'un template est toujours la métaclasse sur laquelle le template est défini. Tous les attributs standard et étendus, toutes le collections et les templates définis sur la métaclasse d'objet active et ses parents sont visibles, mais un seul objet est actif à la fois.
Exemples |
---|
Le template suivant est appliqué au package
P1, qui contient une classe
C1, qui contient les opérations
O1 et O2, qui chacune contiennent les paramètres P1 et P2. La portée change, affectant la valeur de la
variable %Name%, à mesure que
chaque collection est parcourue. Le mot clé Outer est utilisé pour revenir temporairement aux
portées précédentes
:%Name% .foreach_item(Classes) \n\t*%Name% in %Outer.Name% .foreach_item(Operations) \n\t*%Name% in %Outer.Name% in %Outer.Outer.Name% .foreach_item(Parameters) \n\t\t*%Name% in %Outer.Name% in %Outer.Outer.Name% in %Outer.Outer.Outer.Name% .next .next .nextRésultat : P1 *C1 in P1 *O1 in C1 in P1 *P1 in O1 in C1 in P1 *P2 in O1 in C1 in P1 *O2 in C1 in P1 *P1 in O2 in C1 in P1 *P2 in O2 in C1 in P1 |
La portée Outer
est restaurée lorsque vous quittez un bloc .foreach_item. Les portées imbriquées forment une
hiérarchie qui peut être visualisée sous la forme d'une
arborescence, le plus haut niveau étant la racine. Utilisez Parent plutôt que Outer pour revenir au niveau de la
portée de l'objet d'origine. Par exemple, rien ne sera produit si le
template suivant est appliqué au paramètre P1:%Name% in %Outer.Name% in %Outer.Outer.Name%Toutefois, ce template produira un résultat : %Name% in %Parent.Name% in %Parent.Parent.Name%Résultat : P1 in O1 in C1 |