Module:ExempleParams
ExempleParams est un court module qui montre comment récupérer les paramètres à l'intérieur du module au moyen de ipairs() et de pairs(). Il s'agit d'un modèle à visée pédagogique (voir Aide:Module).
Utilisation
Fonctions exportables :
imprime_les_parametres(params)– cette fonction imprime les paramètres qu'on lui passe.
Modules externes et autres éléments dont ce module a besoin pour fonctionner :
mw.ipairs– générateur de paramètres non nommés (ou nommés explicitement avec un numéro entier) formant une séquence continue de 1 à N, sans aucun trou.mw.pairs– générateur de paramètres nommés et non nommé. Remarque: il reprend en séquence d'abord les paramètres non nommés (ou nommés avec une clé entière) formant une séquence continue de 1 à N, sans aucun trou, avant de reprendre tous les autres paramètres (chaines, et nombres entiers ou pas) dans un ordre totalement arbitraire
Exemples
{{#invoke:ExempleParams|imprime_les_parametres|paramètre non nommé 1| paramètre
non nommé 2|troisième paramètre || cinquième |
nommé1 = couleur
| nommé2
=bleu|dernier
nommé=last }}
donne (notez quels blancs ou sauts de lignes sont éliminés ou pas des noms ou des valeurs des paramètres :
- Paramètres séquentiels uniquement (entiers de 1 à N, sans aucun trou)
- args[1] = "paramètre non nommé 1"
- args[2] = "paramètre
non nommé 2"
- args[3] = "troisième paramètre "
- args[4] = ""
- args[5] = " cinquième "
- Tous les paramètres (dans un ordre arbitraire)
- args[1] = "paramètre non nommé 1"
- args[2] = "paramètre
non nommé 2"
- args[3] = "troisième paramètre "
- args[4] = ""
- args[5] = " cinquième "
- args["nommé1"] = "couleur"
- args["dernier
nommé"] = "last"
- args["nommé2"] = "bleu"
- Tous les paramètres (dans l’ordre numérique sinon lexicographique ASCII des clefs)
- args[1] = "paramètre non nommé 1"
- args[2] = "paramètre
non nommé 2"
- args[3] = "troisième paramètre "
- args[4] = ""
- args[5] = " cinquième "
- args["dernier
nommé"] = "last"
- args["nommé1"] = "couleur"
- args["nommé2"] = "bleu"
{{#invoke:ExempleParams|imprime_les_parametres|écrivain|2=wallon|nom=[[Arthur Masson]]|mort à=[[Namur]]|mort en=1970|10=hors séquence|6=hors séquence aussi|1.5=belge| 3 = avec des blancs | 3.0 = avec des blancs aussi |4= |-1=entier négatif|+1=entier positif|0=entier nul|-0=entier négatif nul}}
donne :
- Paramètres séquentiels uniquement (entiers de 1 à N, sans aucun trou)
- args[1] = "écrivain"
- args[2] = "wallon"
- args[3] = "avec des blancs"
- args[4] = ""
- Tous les paramètres (dans un ordre arbitraire)
- args[1] = "écrivain"
- args[2] = "wallon"
- args[3] = "avec des blancs"
- args[4] = ""
- args[6] = "hors séquence aussi"
- args[0] = "entier nul"
- args["+1"] = "entier positif"
- args["nom"] = "Arthur Masson"
- args["1.5"] = "belge"
- args["mort en"] = "1970"
- args[10] = "hors séquence"
- args[-1] = "entier négatif"
- args["mort à"] = "Namur"
- args["-0"] = "entier négatif nul"
- args["3.0"] = "avec des blancs aussi"
- Tous les paramètres (dans l’ordre numérique sinon lexicographique ASCII des clefs)
- args[-1] = "entier négatif"
- args[0] = "entier nul"
- args[1] = "écrivain"
- args[2] = "wallon"
- args[3] = "avec des blancs"
- args[4] = ""
- args[6] = "hors séquence aussi"
- args[10] = "hors séquence"
- args["+1"] = "entier positif"
- args["-0"] = "entier négatif nul"
- args["1.5"] = "belge"
- args["3.0"] = "avec des blancs aussi"
- args["mort en"] = "1970"
- args["mort à"] = "Namur"
- args["nom"] = "Arthur Masson"
Remarquer
- la table d'exportation de fonctions (ici « p ») contient déclaration et retour ; les fonctions exportées sont de la forme p.nomFonction() ;
- le passage des paramètres aux fonctions exportées et leur récupération[1] (frame, pairs, ipairs) ;
La documentation de ce module est générée par le modèle {{Documentation module}}.
Elle est incluse depuis sa sous-page de documentation. Veuillez placer les catégories sur cette page-là.
Les éditeurs peuvent travailler dans le bac à sable (créer).
Voir les statistiques d'appel depuis le wikicode sur l'outil wstat et les appels depuis d'autres modules.
-- Illustration du passage des paramètres dans les modules Lua
-- utilisation des itérations sur ipairs() et pairs()
local p = {};
function p.imprime_les_parametres( frame )
local args = frame.args
-- Uniquement les paramètres non nommés (ou dont la clé est un indice entier séquentiel)
local resultat = '; Paramètres séquentiels uniquement (entiers de 1 à N, sans aucun trou)\n';
for rang, valeur in ipairs( args ) do
resultat = resultat .. ': args[' .. rang .. '] = "' .. valeur .. '"\n';
end
resultat = resultat .. '; Tous les paramètres (dans un ordre arbitraire)\n';
for clef, valeur in pairs( args ) do
-- Noter que les deux variables `clef` et `valeur` sont locales à chaque boucle
-- `for` qui les déclare implicitement : il est donc inutile de les déclarer avant
-- car elles ne seraient pas utilisées et pas modifiées du tout, et leur valeur
-- est inaccessible à la boucle suivante ou après la fin des boucles.
if type( clef ) == 'number' then
resultat = resultat .. ': args[' .. clef .. '] = "' .. valeur .. '"\n';
else
resultat = resultat .. ': args["' .. clef .. '"] = "' .. valeur .. '"\n';
end
end
resultat = resultat .. '; Tous les paramètres (dans l’ordre numérique sinon lexicographique ASCII des clefs)\n';
-- Forme une séquence contenant seulement les clefs dans un ordre quelconque en les
-- mettant en valeur d'une autre clef, un numéro entier arbitraire mais séquentiel.
local clefs = {}; -- séquence initialement vide
for clef, _ in pairs( args ) do
table.insert( clefs, clef );
end
-- Trie cette séquence.
table.sort( clefs,
function( a, b )
--[[
-- Pour pouvoir comparer les clés de types différents, on peut les convertir toutes
-- en chaînes (sinon se produit l'erreur Lua: attempt to compare string with number).
return tostring(a) < tostring(b);
-- Noter qu'alors une clé comme '+' sera classée lexicographiquement avant la clé 1, et
-- la clé 10 sera classée lexicographiquement avant la clé 2.
--]]
-- On peut aussi décider que lorsque les deux clés sont de types différents,
-- on classe toute clé numérique avant celles d'un autre type
-- if faut juste modifier cette fonction ainsi :
if type(a) ~= type(b) then
return type(a) == 'number';
else
return a < b;
end
-- Noter toutefois que Scribunto transmet tout paramètre dont le nom est numérique
-- mais non entier tel que `{{#invoke|... |1.5=belge}}` sous forme de chaîne, qui
-- sera donc triée ici lexicographiquement (comme clef="1.5" en Lua) et non
-- pas numériquement (comme clef=1.5 en Lua) et la clef donc toujours listée après
-- tous les autres paramètres dont le nom est n'importe quel entier même de valeur
-- supérieur (le paramètre [20]="z" sera donc AVANT ["1.5"]="a").
-- De même un paramètre dont le nom est entier mais inclut des décimales nulles
-- sera transmis sous forme de chaîne.
-- En revanche tout paramètre dont le nom est donné explicitement avec un signe `=`
-- qu'il soit numérique ou pas, entier ou pas, avec des décimales nulles ou pas
-- verra son nom chaine transmis sans aucun blanc au début ou à la fin, les autres
-- blancs étant compressés en un espace unique; si Scribunto ne voit plus que des
-- chiffres décimaux dans ce nom (éventuellement précédé d'un unique signe `-`)
-- et si sa valeur est représentable en Lua sous forme d'un nombre entier Lua,
-- il sera transmis en tant que nombre (qu'il forme une séquence continue ou pas);
-- la valeur de ces paramètres verra ses blancs au début et à la fin aussi éliminés.
end );
-- Utilise les clés maintenant lues depuis la séquence triée
for rang = 1, #clefs do
local clef = clefs[rang];
local valeur = args[clef];
if type( clef ) == 'number' then
resultat = resultat .. ': args[' .. clef .. '] = "' .. valeur .. '"\n';
else
resultat = resultat .. ': args["' .. clef .. '"] = "' .. valeur .. '"\n';
end
end
return resultat;
end
return p;
Content Disclaimer
Informasi ini disarikan dari Wikipedia dan disajikan kembali untuk tujuan edukasi. Konten tersedia di bawah lisensi CC BY-SA 3.0. Kami tidak bertanggung jawab atas ketidakakuratan data yang bersumber dari kontribusi publik tersebut.
- The information displayed on this website is sourced in part or in whole from Wikipedia and has been adapted for the purpose of restating it. We strive to provide accurate and relevant information, however:
- There is no guarantee of absolute accuracy. Wikipedia is an open, collaborative project that can be edited by anyone, so information is subject to change.
- It is not intended to constitute professional advice. The content displayed is for informational and educational purposes only. For important decisions (e.g., medical, legal, or financial), please consult a professional.
- Content copyright. Wikipedia is licensed under the Creative Commons Attribution-ShareAlike License (CC BY-SA). This means that content may be reused with appropriate attribution and shared under a similar license.
- Responsible use. Any risk arising from the use of information from this website is entirely the responsibility of the user.