« Initiation au Lua avec Scribunto/Gestion de l'environnement » : différence entre les versions
Contenu supprimé Contenu ajouté
→Priorité de l'interpréteur : rédaction |
rédaction |
||
Ligne 310 :
== Priorité de l'interpréteur ==
En général, l'endroit le plus adéquat
<syntaxhighlight lang="lua">
local p = {}
'''<nowiki>{{#invoke:Cadre|cadre1|Coucou! je suis dans un cadre}}</nowiki>''' nous donne : {{#invoke:Cadre|cadre1|Coucou! je suis dans un cadre}}▼
function p.cadre1(frame)
Et là, avec un grand désarroi, nous constatons que cela ne marche pas. Que c'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!▼
return "{{Encadre|contenu="..frame.args[1].."}}"
end
return p
Heureusement, la situation n'est pas désespéré car nous disposons, dans notre lua avec scribunto, d'une fonction préprogrammée '''frame:preprocess''' qui va évaluer les modèles avant que ceci ne soit retourné. Pour expérimenter cela, nous allons donc écrire, dans le [[module:Cadre]], une nouvelle fonction '''p.cadre2''', ainsi :▼
</syntaxhighlight>
'''<nowiki>{{#invoke:Cadre|cadre2|Coucou! je suis dans un cadre}}</nowiki>''' nous donne : {{#invoke:Cadre|cadre2|Coucou! je suis dans un cadre}}▼
▲'''<nowiki>{{#invoke:Cadre|cadre1|Coucou
▲Et là, avec un grand désarroi, nous constatons que cela ne marche pas. Que c'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
▲Heureusement, la situation n'est pas désespéré car nous disposons, dans notre lua avec scribunto, d'une fonction préprogrammée '''frame:preprocess''' qui va évaluer les modèles avant que ceci ne soit
<syntaxhighlight lang="lua">
local p = {}
function p.cadre2(frame)
return frame:preprocess("{{Encadre|contenu="..frame.args[1].."}}")
end
return p
</syntaxhighlight>
▲'''<nowiki>{{#invoke:Cadre|cadre2|Coucou
Et là, ça marche, youpi !
|