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
[modifier le code]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
[modifier le code]{{#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
[modifier le code]- 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;