« Initiation au Lua avec Scribunto/L'objet Frame » : différence entre les versions

Contenu supprimé Contenu ajouté
m Robot : Remplacement de texte automatisé (- d'utiliser + d’utiliser )
m Robot : Remplacement de texte automatisé (- n'est pas + n’est pas , - Aujourd'hui + Aujourd’hui , - d'euros + d’euros , - d'agir + d’agir , - l'apparence + l’apparence ); changements de type cosmétique
Ligne 15 :
Une remarque que l’on peut faire à propos de l’objet '''frame''' et de la façon de l’utiliser comme l'accès aux arguments '''frame.args[1]''', '''frame.args[2]''', etc. est la ressemblance avec les notations relatives aux tables. '''frame''' serait une table et '''frame.args''' que l’on pourrait aussi noter '''frame["args"]''' serait une table, indexée par la chaîne de caractères "args", se trouvant dans la table '''frame'''. Par contre '''frame.args''' serait une table à accès numérique. C'est pour cela que l’on note ses arguments '''frame.args[1]''', '''frame.args[2]''', etc.
 
En réalité, ce que l’on vient de dire n'estn’est pas tout à fait vrai. À l'appel d'un module avec #invoke, la table '''frame''' n'estn’est pas créée et remplie tel que l’on vient de le dire. Quand l’on fait appel à un élément de la table numérique '''frame.arg''', une méta-méthode est activée pour demander l’objet souhaité au logiciel MediaWiki. La table '''frame''' est en réalité une méta-table remplie de méta-méthodes dont la fonction est de simuler l’existence d'une table qui contiendrait les éléments décrits plus haut alors, qu'en réalité, ils sont demandés au fur et à mesure des besoins au logiciel MediaWiki.
 
Comme "frame" n'estn’est pas une vraie table, on n'estn’est pas assuré que toutes les fonctions agissant sur les tables vont fonctionner correctement. Nous devons donc connaître la liste des fonctions qui fonctionnent correctement et la liste des fonctions qui ne fonctionnent pas correctement, ces deux listes étant susceptibles d’être modifiées au fil des versions de Lua et de Scribunto.
 
Les fonctions sur lesquelles, on peut compter actuellement sont '''ipairs''' et '''pairs'''.
Ligne 23 :
Nous allons donc donner un exemple simple utilisant la fonction '''ipair'''.
 
Dans le [[moduleModule:Frame]], écrivons une fonction '''p.evalue''' qui compte combien il y a d'arguments contenant une valeur numérique et combien il y a d'arguments contenant une chaîne de caractères.
 
<syntaxhighlight lang="lua">
Ligne 57 :
 
 
Il est à noter que la déclaration : '''<nowiki>{{#invoke:''Module''|''fonction''|["fleur"]=rose}}</nowiki>''' n'estn’est pas correcte car ["fleur"] sera interprété comme la chaîne de caractère "["fleur"]" (voir l'exemple ci-dessous avec ("personnage"]).
 
Écrivons un exemple pour voir si cela marche bien !
 
 
Dans le [[moduleModule:Frame]], écrivons une fonction '''p.renvoie''' qui nous renvoie les clés utilisés avec les objets correspondants.
 
<syntaxhighlight lang="lua">
Ligne 89 :
 
 
Tous les exemples de ce paragraphe se trouvent dans le [[moduleModule:Frame]].
 
 
Ligne 125 :
Cette fonction permet de connaître, à l'intérieur du module, les arguments du modèle qui a appelé le module où se trouve la fonction '''frame:getParent'''.
 
La fonction '''frame:getParent''' retourne une table contenant une table, indexée par la chaîne de caractère "args", qui contient tous les paramètres passés au modèle. Par exemple, si la fonction '''frame:getParent''' se trouve dans un module placé dans un modèle dont l'appel se fait ainsi :
 
<source lang="text">
Ligne 143 :
 
 
Si le modèle appelant possède un lien qui n'estn’est pas renseigné, alors La table model.args retournera, à l'index correspondant, la chaîne vide "" (et pas ''nil'').
 
 
À titre d'exemple, dans le [[moduleModule:Frame]] nous écrivons la fonction '''p.Parent''' ainsi :
 
<syntaxhighlight lang="lua">
Ligne 217 :
 
function p.child(frame)
newFrame = frame:newChild{args={"Jeudi",frame.args[2]}}
return p.replique(newFrame)
end