Projet:Scribunto/Guide/Exemple 4
Introduction
modifierPour 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.
Code
modifierVoici 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…).