Modul:Yesno
Acest modul oferă o funcție pentru tratarea unitară a valorilor de tip „boolean” primite ca text wiki (de exemplu parametri de format). Funcționează similar cu formatul {{yesno}}: transformă valori precum da, nu, true, 0 sau 1 în valori booleene Lua (true / false).
Modulul nu poate fi apelat direct cu {{#invoke:}}; este destinat să fie încărcat în alte module Lua prin require.
Utilizare
Mai întâi, încărcați modulul:
local yesno = require('Modul:Yesno')
Apoi apelați funcția:
yesno(val, default)
val- Valoarea de evaluat. Poate fi un șir de caractere, un număr, o valoare booleană sau
nil. default- (opțional) Valoarea returnată dacă
valnu este recunoscută ca „adevărat” sau „fals”. Dacă este omisă, valoarea implicită estenil.
Valori recunoscute
Comparația șirurilor de caractere nu ține cont de majuscule și minuscule (DA, Da și da sunt echivalente).
| Valoare de intrare | Rezultat |
|---|---|
true (boolean) |
true
|
'yes', 'y', 'da', 'd', 'true', 't' |
true
|
1 sau '1' (număr sau șir care reprezintă numărul 1) |
true
|
false (boolean) |
false
|
'no', 'nu', 'n', 'false', 'f' |
false
|
0 sau '0' (număr sau șir care reprezintă numărul 0) |
false
|
nil |
nil (indiferent de valoarea lui default)
|
Orice altă valoare (inclusiv șirul gol ) |
valoarea lui default (implicit nil)
|
- Observații
- Dacă
valestenil, funcția returnează întotdeaunanil, chiar dacă a fost specificatdefault. Pentru a trata în același fel valorile lipsă și pe cele nerecunoscute, folosițiyesno(val, default)doar dacăvaleste diferit denil, sau completați explicit valoarea lipsă (de exempluyesno(args.param or , default)). - Verificarea numerică se face cu
tonumber, deci și șiruri precum'1.0'sunt interpretate catrue, iar'0.0'cafalse.
Exemple
local yesno = require('Modul:Yesno')
yesno('da') -- true
yesno('DA') -- true
yesno('Yes') -- true
yesno('true') -- true
yesno(1) -- true
yesno('1') -- true
yesno('nu') -- false
yesno('N') -- false
yesno('false') -- false
yesno(0) -- false
yesno('0') -- false
yesno(nil) -- nil
yesno(nil, true) -- nil (nil returnează întotdeauna nil)
yesno('poate') -- nil (valoare nerecunoscută, fără default)
yesno('poate', true) -- true (se returnează default)
yesno('', false) -- false (șir gol, se returnează default)
Utilizare tipică într-un modul
Exemplu de funcție care citește un parametru opțional al unui format:
local yesno = require('Modul:Yesno')
local p = {}
function p.main(frame)
local args = frame:getParent().args
-- Parametrul |afișare=da / nu; implicit se afișează.
local afisare = yesno(args.afisare, true)
if afisare == false then
return ''
end
return 'Conținut afișat'
end
return p
În acest exemplu, {{Format|afișare=nu}} nu afișează nimic, în timp ce {{Format|afișare=da}}, {{Format|afișare=1}} sau omiterea parametrului produc afișarea conținutului.
Personalizare
Setul de valori recunoscute se poate modifica editând direct codul modulului, de exemplu pentru a adăuga alte cuvinte considerate „adevărat” sau „fals”.
Dacă folosiți valori cu caractere non-ASCII (de exemplu diacritice), înlocuiți în cod val:lower() cu mw.ustring.lower(val), pentru ca transformarea în minuscule să funcționeze corect.
Vezi și
- {{yesno}} – formatul echivalent, pentru utilizare în pagini wiki
- Modul:Arguments – modul pentru prelucrarea argumentelor
-- Function allowing for consistent treatment of boolean-like wikitext input.
-- It works similarly to the template {{yesno}}.
return function (val, default)
-- If your wiki uses non-ascii characters for any of "yes", "no", etc., you
-- should replace "val:lower()" with "mw.ustring.lower(val)" in the
-- following line.
val = type(val) == 'string' and val:lower() or val
if val == nil then
return nil
elseif val == true
or val == 'yes'
or val == 'y'
or val == 'da'
or val == 'd'
or val == 'true'
or val == 't'
or val == 'on'
or tonumber(val) == 1
then
return true
elseif val == false
or val == 'no'
or val == 'nu'
or val == 'n'
or val == 'false'
or val == 'f'
or val == 'off'
or tonumber(val) == 0
then
return false
else
return default
end
end