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

Contenu supprimé Contenu ajouté
m Robot : Remplacement de texte automatisé (- l'objet + l’objet )
m Robot : Remplacement de texte automatisé (- l'on + l’on )
Ligne 8 :
}}
 
Ce paragraphe étudie plus en détail l’objet '''frame''' que l'onl’on peut considérer comme étant l'interface avec le programme. C'est l’objet frame qui reçoit les paramètres que l'onl’on envoie au programme grâce à la commande #invoke.
__TOC__
{{Clr}}
== Nature de l’objet frame ==
 
Une remarque que l'onl’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'onl’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'onl’on note ses arguments '''frame.args[1]''', '''frame.args[2]''', etc.
 
En réalité, ce que l'onl’on vient de dire n'est pas tout à fait vrai. À l'appel d'un module avec #invoke, la table '''frame''' n'est pas créée et remplie tel que l'onl’on vient de le dire. Quand l'onl’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'est pas une vraie table, on n'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.
Ligne 52 :
== Arguments avec clé sous forme de chaîne de caratères ==
 
Jusqu'à maintenant, nous avons déclaré, dans la commande #invoke, les arguments à la suite les uns des autres comme on déclare les objets d'une table à clé numérique. Le premier argument s'associant automatiquement à la clé 1, le deuxième à la clé 2 et ainsi de suite. Toutefois, de même que l'onl’on a vu que, dans les tables, il est possible de créer des clés sous forme de chaîne de caractères, nous allons voir qu’il en est de même pour la pseudo-table '''frame.args'''. Pour cela, il suffit de déclarer, dans la commande '''#invoke''', les arguments avec clé sous forme de chaîne de caractères comme on le ferait pour une table.
 
Par exemple, on écrira : '''<nowiki>{{#invoke:''Module''|''fonction''|fleur=rose}}</nowiki>'''
Ligne 115 :
 
 
En dehors de la clé '''args''' qui référence la table contenant les arguments transmis par la commande '''#invoke''', nous voyons que nous disposons de 11 fonctions que nous allons étudier en détail ci-dessous. Une petite remarque que l'onl’on peut faire ici est que la notation des fonctions diffère légèrement de ce que l'onl’on avait mentionné auparavant. En effet, au lieu de noter, par exemple, la deuxième fonction de la liste '''frame.getParent''' (avec '''.'''), nous la noterons '''frame:getParent''' (avec ''':'''). Cette notation est probablement dûe au fait que nous n'avons pas une véritable table '''frame''' mais que nous avons une '''pseudo-méta-table''' et que les fonctions doivent être demandées à l'extérieur du programme (cela reste à confirmer).
 
 
Ligne 207 :
Cette fonction permet d'utiliser des fonctions qui, normalement, attendent des arguments provenant d'une commande '''#invoke'''.
 
Dans l'exemple ci-dessous la fonction '''p.replique''' est rédigée comme si elle devait être utilisée grâce à l'appel '''<nowiki>{{#invoke:Frame|replique|jardin|maison}}</nowiki>''' par exemple. La fonction '''p.child''' fabrique un nouvel objet ''frame'' avec pour arguments "jeudi" et frame.args[2] et appelle la fonction '''p.replique''' sous la forme '''p.replique(newFrame)''', ce qui est alors équivalent à un appel du type '''<nowiki>{{#invoke:Frame|replique|jeudi|frame.args[2]}}</nowiki>''' que l'onl’on n'aurait pas pu faire puisque nous ne pouvons pas utiliser la commande '''#invoke''' dans un module.
 
<syntaxhighlight lang="lua">