Модуль:Yesno
Модуль падае адзіны інтэрфейс для апрацоўкі булевых або булевападобных уваходных даных. Lua дазваляе выкарыстоўваць лагічныя значэнні true
і false
, у той час як шаблоны, напісаныя з дапамогай вікі-разметкі, часта выкарыстоўваюць абазначэнні падобныя да «yes» і «no». Модуль пераўтворыць падобныя радкі і выдае булеўскую велічыню, прыдатную для выкарыстання ў Lua. Акрамя таго можа вяртацца значэнне nil
. Як уваходныя даныя могуць выкарыстоўвацца іншыя структуры Lua, у тым ліку булевы пераменныя, лікі, табліцы і функцыі. Акрамя таго можна задаць вяртанае прадвызначанае значэнне.
Сінтаксіс
[правіць зыходнік]yesno(value, default)
value
— правяраная велічыня. Булеўская і ім падобныя ўваходныя даныя заўсёды прыводзяць да true
альбо false
, nil
вяртае nil
. Астатнім выпадкам адпавядае default
.
Выкарыстанне
[правіць зыходнік]Для пачатку, загрузіце модуль. Звярніце ўвагу, што гэта можна зрабіць толькі з іншых модуляў.
local yesno = require('Module:Yesno')
Некаторыя значэнні заўсёды вяртаюць true
, некаторыя іншыя — false
. nil
заўсёды вяртае nil
.
-- Заўсёды вяртаюць true:
yesno('yes')
yesno('y')
yesno('true')
yesno('t')
yesno('да')
yesno('так')
yesno('д')
yesno('1')
yesno(1)
yesno(true)
-- Заўсёды вяртаюць false:
yesno('no')
yesno('n')
yesno('false')
yesno('f')
yesno('нет')
yesno('не')
yesno('н')
yesno('0')
yesno(0)
yesno(false)
-- nil заўсёды вяртае nil:
yesno(nil)
Радковыя значэнні папярэдне пераўтворацца да ніжняга рэгістра:
-- Заўсёды вяртаюць true:
yesno('Yes')
yesno('YES')
yesno('yEs')
yesno('Y')
yesno('tRuE')
-- Заўсёды вяртаюць false:
yesno('No')
yesno('NO')
yesno('nO')
yesno('N')
yesno('fALsE')
Калі yes no прымае аргумент выдатны ад пералічаных вышэй, вы можаце задаць прадвызначанае значэнне. Калі яно не зададзена, для іх будзе вяртацца nil
.
-- вяртаюць nil:
yesno('foo')
yesno({})
yesno(5)
yesno(function() return 'This is a function.' end)
-- вяртаюць true:
yesno('foo', true)
yesno({}, true)
yesno(5, true)
yesno(function() return 'This is a function.' end, true)
-- вяртаюць «bar»:
yesno('foo', 'bar')
yesno({}, 'bar')
yesno(5, 'bar')
yesno(function() return 'This is a function.' end, 'bar')
Звярніце ўвагу на паводзіны пры перадачы пустога радка:
yesno('') -- вяртае nil.
yesno('', true) -- вяртае true.
yesno('', 'bar') -- вяртае «bar».
Хоць пусты радок у вікітэксце адпавядае false, Lua ставіць яму ў адпаведнасць true. Гэтак жа робіць і модуль. Таму для пазбягання падобных памылак пустыя радкі павінны адсейвацца да выкарыстання гэтага модуля.
-- 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 == 'true'
or val == 't'
or val == 'да'
or val == 'так'
or val == 'д'
or val == 'x'
or val == 'х'
or tonumber(val) == 1
then
return true
elseif val == false
or val == 'no'
or val == 'n'
or val == 'false'
or val == 'f'
or val == 'нет'
or val == 'не'
or val == 'н'
or tonumber(val) == 0
then
return false
else
return default
end
end