Chapter 9 Guide de référence de la génération (GTL)
Les templates sont instanciés via un processus appelé conversion. La conversion est effectuée dans une portée définie et consiste à remplacer les variables par leurs valeurs correspondante dans le cadre défini par la portée Tous les templates sont définis par rapport aux classes du métamodèle, ils sont considérés comme des propriétés d'un type particulier qui utilisent le résultat de leur conversion comme valeur.
Une portée est un contexte pour l'évaluation d'un template, il inclut l'objet actif et les variables locales. A un point donné de la conversion, un seul objet est actif ; il s'agit de l'objet auquel le template est appliqué. Au sein d'une portée de conversion, tous les attributs et collections de métamodèle définis dans la métaclasse de l'objet actif et ses parents sont visibles, de même que les attributs étendus et templates correspondantes. Lorsque le moteur de conversion commence à évaluer un template, une nouvelle portée de conversion est créée.
Pour plus d'informations sur les collections d'objets, reportez-vous à la section "Associations et collections", dans le chapitre "Métamodèle public PowerAMC".
Lorsqu'une portée est créée il s'agit de la portée de la conversion courante, l'ancienne portée de conversion constituant la portée externe de la portée de conversion courante
Lorsqu'une portée est quittée sa portée externe est restaurée comme étant la portée de conversion courante
Pour plus d'informations sur la portée externe, reportez-vous à la section "Définition des variables".
De nouvelles portées peuvent être créées lors de l'évaluation d'un template qui force l'objet à changer. Par exemple, la macro foreach_item
, qui permet l'itération sur les collections définit une nouvelle portée, de même que la macro foreach_line
. La portée externe est restaurée à la fin du bloc.
Pour plus d'informations sur ces deux macros, reportez-vous aux sections "Macro foreach_item" et "Macro foreach_line".
Les portées imbriquées forment une hiérarchie qui peut être affichée sous la forme d'une arborescence, la portée de plus haut niveau étant la racine.
L'exemple suivant montre le mécanisme de la portée à l'aide d'un template de classe :
Copyright (C) 2005. Sybase Inc. All rights reserved. |
![]() |