Projet:Scribunto/Guide/Exemple 4

Introduction modifier

Pour récupérer la valeur d'un paramètre passé au modèle il suffit (voir précédemment) d'accéder à args["nom paramètre"]. Cela implique qu’en pratique, on n'accède qu'aux paramètres qu'on cherche à utiliser. Il peut toutefois être intéressant de parcourir tous les paramètres reçus : soit pour pour détecter l'utilisation de paramètres inconnus (typiquement des fautes de frappe ou des erreurs d’utilisation d’un modèle), soit pour gérer un nombre arbitraire de paramètres (par exemple {{ma liste|item1=titi|item2=tata|item3=toto|item4=tutu|item5=tonton|...}}.

Les tables de paramètres (dans frame) sont en fait des « méta-tables ». Certaines opérations de tables ne fonctionnent pas sur de telles méta-tables, par exemple la fonction next() ou l’opérateur de longueur #frame.args. Cependant, les fonctions pairs() ou ipairs() fonctionnent comme attendu.

Il faut garder à l’esprit que l’ordre dans lequel ces fonctions retournent les paramètres est arbitraire et imprévisible : il ne correspond pas à l’ordre dans lequel les paramètres ont été écrit dans le wikicode appelant. Il n’y a aucun moyen de connaitre cet ordre.

Voici un extrait de code effectuant un parcours de tous les paramètres reçus, stockés dans l'objet frame (c'est-à-dire les paramètres reçus par le modèle, mais cela fonctionne pareil pour les paramètres envoyés par le modèle)[pas clair] :

-- k et v reçoivent resp. le nom et la valeur de chaque paramètre
for k, v in pairs(frame.args) do
   -- le nom k du paramètre est soit un texte de type "string" (paramètre nommé),
   -- soit un nombre de type "number" (paramètre numéroté) ;
   -- dans tous les cas sa valeur v est un texte
   if (type (k) == "string") then
      -- ici on traite éventuellement ce paramètre nommé
   else
      -- ici on traite éventuellement ce paramètre numéroté
   end
end

Noter l'utilisation de la fonction type() qui retourne une chaîne décrivant la nature du contenu du paramètre (string, number, table, nil…).