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

Contenu supprimé Contenu ajouté
Ligne 218 :
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 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'''. PrenonsIl uny exemplea :deux Dansfaçon led'utiliser [[module:Fonction]],la nousfonction avionsrequire écritselon uneque fonction '''f''l'on quisouhaite élèverécupérer undes nombre au carré.objets, Dansdans un autre [[module:Aspire]], essayonsqui d'yne inclurese letrouve modulepas Fonctiondans etla detable créerque unel'on fonctiona pris l'habitude d'appeler 'carre''p''' (mais qui appellepourrait s'appeler autrement) ou que l'on souhaite récupérer des objets qui ne sont pas dans la fonctiontable '''fp''' pourcomme éleverdes unfonctions, nombredes auvariables, carréou :d'autres table.
 
==== Première façon : On souhaite récupérer des objets indépendants de la table p ====
 
Il est, bien sût, indispensable que les objets que l'on souhaite récupérer ne soient pas déclarés en local.
 
Prenons un exemple : Dans le [[module:Fonction]], nous avions écrit une fonction '''f''' qui élève un nombre au carré. Dans un autre [[module:Aspire]], essayons d'y inclure le module Fonction et de créer une fonction '''carre''' qui appelle la fonction '''f''' pour élever un nombre au carré :
 
<syntaxhighlight lang="lua">
Ligne 241 ⟶ 247 :
 
Nous avons bien obtenu 7 au carré qui donne 49. On peut aussi vérifier que l'on peut récupérer une variable déclarée dans le module que l'on appelle avec '''require''' a condition que cette variable ne soit pas déclarée avec le mot clé '''local''', sinon on obtient une erreur de script.
 
 
==== Deuxième façon : L'objet que l'on souhaite récupérer est dans la 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.
 
Prenons un exemple : Dans un [[module:Ingère]] écrivons une fonction '''compo''' qui appelle la fonction '''p.composition''' se trouvant dans le [[module:Fonction]]
 
 
'''<nowiki>{{#invoke:Ingère|compo|7}}</nowiki>''' nous donne : {{#invoke:Ingère|compo|7}}
 
== Priorité de l'interpréteur ==