Module:ExempleParams

 Documentation[voir] [modifier] [historique] [purger]

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).

UtilisationModifier

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

ExemplesModifier

{{#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"


RemarquerModifier

  • 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) ;
  1. La récupération des paramètres s'effectue au moyen d'un mécanisme qui s'apparente à celui de getopt() (en)

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;