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

Contenu supprimé Contenu ajouté
Ligne 214 :
== Comment utiliser des fonctions écrites dans un autre module ==
 
Dans les chapitres précédents, nous avons dit qu'une variable ou une fonction déclarée avec le mot-clé '''local''' n'est utilisable qu'aà l'intérieur du module où elles sont déclarées. Cette affirmation sous-entend que si l'on n'emploie pas le mot-clé '''local''', alors la variable ou la fonction déclarées devrait pouvoir être utilisée dans un autre module. Dans ce paragraphe, nous allons donc étudier comment utiliser les variables et les fonctions créées dans un autre module sans le mot-clé '''local'''.
 
Le principal intérêt de cette possibilité va être de pouvoir se confectionner des modules contenant des fonctions qui peuvent être utiles dans plusieurs autres modules en évitant ainsi de devoir les réécrire ces fonctions dans chaque module.
 
La fonction préprogrammée qui va nous permettre d'appeler le contenu d'un autre module est la fonction '''require'''. Il y a deux façonfaçons d'utiliser la fonction '''require''' selon que l'on souhaite récupérer des objets, dans un autre module, qui ne se trouve pas dans la table que l'on a pris l'habitude d'appeler '''p''' (mais qui pourrait s'appeler autrement) ou que l'on souhaite récupérer des objets qui ne sont pas dans laune table '''p''' comme des fonctions, des variables, ou d'autres table.
 
==== Première façon : On souhaite récupérer des objets indépendants de la table p ====
Ligne 249 :
 
 
==== Deuxième façon : L'objet que l'on souhaite récupérer est dans laune table p ====
 
C'est un peu comme si l'on souhaitait utiliser la commande '''#invoke''' à partir d'un autre module. Mais cette commande ne marche pas si elle est utilisée dans un module. Nous allons donc transférer le contenu de la table '''p''' dans une table locale au module appelant.
Ligne 269 :
</syntaxhighlight>
 
La grosse différence avec ce que l'on avait l'habitude de voir est que l'on ne trouve pas '''frame''' entre les parenthèses de la fonction '''p.cube''' puisque, cette fois, nous n'avons pas l'intention d'utiliser la commande '''#invoke'''. À part cela, le reste est identique !
 
{{Encart
| couleur = olive
| symbole = question
| contenu =
'''Question :''' Peut-on appeler, à partir d'un autre module, une fonction qui aurait '''frame''' entre parenthèse ?
 
'''Réponse :''' Non, car '''frame''' implique obligatoirement l'utilisation de la commande '''#invoke'''. Et cette commande ne peut pas être utilisée dans un module.
}}
 
Le contenu du module Ingère est :
Ligne 278 ⟶ 286 :
local p = {}
 
local t = require ("Module:Réservoir")
 
function p.compo(frame)
Ligne 289 ⟶ 297 :
</syntaxhighlight>
 
Nous voyons que leLe contenu de la table '''p''' du module '''Réservoir''' a étéest transféré dans la table '''t''' du module '''Ingère'''. La fonction '''p.cube''' est devenue la fonction '''t.cube'''.
 
 
'''<nowiki>{{#invoke:Ingère|compo|3}}</nowiki>''' nous donne alors : {{#invoke:Ingère|compo|3}}
 
== Priorité de l'interpréteur ==