« Initiation au Lua avec Scribunto/Gestion de l'environnement » : différence entre les versions

Contenu supprimé Contenu ajouté
mise à jour
Ligne 356 :
== Priorité de l'interpréteur ==
 
En général, l'endroit le plus adéquat pour appeler un module est de lale faire à partie d'un modèle. Ceci est fortement conseillé pour éviter de surcharger l'espace principal avec la commande '''#invoke'''. Par conséquent, le plus souvent, les modèles appelleront les modules. Quelquefois, on risque de devoir faire le contraire. C'est-à-dire d'appeler un modèle dans un module. Que cese passe -t'-il alors ? Nous allons tester cette opération en prenant un exemple. Essayons d'écrire un module qui aurait pour fonction d'encadrer un texte en faisant appel au [[modèle:Encadre]]. Dans un [[module:Cadre]], nous serions tenté d'écrire une fonction '''p.cadre1''' ainsi :
 
<syntaxhighlight lang="lua">
Ligne 374 :
 
 
Et là, avec un grand désarroi, nous constatons que cela ne marche pas. Que cs'est-il passé ? En fait, l'interpréteur de mediawiki évalue les modèles avant d'avoir les retours des modules. Et, par conséquent, quand le module Cadre nous ramène <nowiki>{{Encadre|contenu=Coucou, je suis dans un cadre!}}</nowiki>, il est déjà trop tard !
 
Heureusement, la situation n'est pas désespérédésespérée car nous disposons, dans notre lua avec scribunto, d'une fonction préprogrammée '''frame:preprocess''' qui va évaluer les modèles avant que ceciceux-ci ne soitsoient retournés. Pour expérimenter cela, nous allons donc écrire, dans le [[module:Cadre]], une nouvelle fonction '''p.cadre2''', ainsi :
 
<syntaxhighlight lang="lua">