Этот модуль предоставляет согласованный интерфейс для обработки логического или логического строкового ввода. В то время как Lua допускает логические значения true
и false
, шаблоны wikicode могут выражать логические значения только через строки, такие как «да», «нет» и т. д. Этот модуль обрабатывает такие типы строк и преобразует их в логический ввод для обработки Lua. Он также возвращает nil
значения как nil
, чтобы обеспечить различия между nil
и false
. Модуль также принимает другие структуры Lua в качестве входных данных, то есть логические значения, числа, таблицы и функции. Если ему переданы входные данные, которые он не распознает как логические значения или nil
, можно указать возвращаемое значение по умолчанию.
данет ( значение , по умолчанию )
value
— это проверяемое значение. Логический ввод или логический ввод (см. ниже) всегда оценивается как true
или false
, и nil
всегда оценивается как nil
. Другие значения оцениваются как default
.
Сначала загрузите модуль. Обратите внимание, что его можно загрузить только из других модулей Lua, а не из обычных страниц вики. Для обычных страниц вики вы можете использовать {{ yesno }} .
локальный yesno = require ( 'Модуль:Yesno' )
Некоторые входные значения всегда возвращают true
, а некоторые всегда возвращают false
. nil
значения всегда возвращают nil
.
-- Они всегда возвращают значение true: yesno ( 'yes' ) yesno ( 'y' ) yesno ( 'true' ) yesno ( 't' ) yesno ( 'on' ) yesno ( '1' ) yesno ( 1 ) yesno ( true )-- Они всегда возвращают false: yesno ( ' no ' ) yesno ( 'n' ) yesno ( ' f' ) yesno ( 'off' ) yesno ( ' 0' ) yesno ( 0 ) yesno ( false )-- Нулевое значение всегда возвращает ноль: yesno ( nil ) yesno ()
Строковые значения преобразуются в нижний регистр перед сопоставлением:
-- Они всегда возвращают значение true: yesno ( 'Yes' ) yesno ( 'YES' ) yesno ( 'yEs' ) yesno ( 'Y' ) yesno ( 'tRuE' )-- Они всегда возвращают false: yesno ( 'No' ) yesno ( 'NO' ) yesno ( 'nO' ) yesno ( 'N' ) yesno ( 'fALsE' )
Вы можете указать значение по умолчанию, если yesno получает входные данные, отличные от перечисленных выше. Если вы не укажете значение по умолчанию, модуль вернет данные nil
для этих входных данных.
-- Эти возвращают nil: yesno ( nil ) yesno ( 'foo' ) yesno ({}) yesno ( 5 ) yesno ( '' ) yesno ( function () return 'Это функция.' end ) yesno ( nil , true ) yesno ( nil , 'bar' )-- Эти возвращают значение true: yesno ( 'foo' , true ) yesno ({}, true ) yesno ( 5 , true ) yesno ( '' , true ) yesno ( function () return 'Это функция.' end , true )-- Эти возвращают "bar": yesno ( 'foo' , 'bar' ) yesno ({}, 'bar' ) yesno ( 5 , 'bar' ) yesno ( '' , 'bar' ) yesno ( function () return 'Это функция.' end , 'bar' )
Хотя пустая строка обычно оценивается как false в wikitext, она оценивается как true в Lua. Этот модуль предпочитает поведение Lua поведению wikitext. Если для вашего модуля важно обрабатывать пустую строку как false, вам нужно будет преобразовать пустые строки в значение, которое оценивается как false, прежде чем передавать их в этот модуль. В случае аргументов, полученных из wikitext, это можно сделать с помощью Module:Arguments .
По определению:
yesno ( nil ) — Возвращает nil. yesno ( 'foo' ) — Возвращает nil. yesno ( nil , true ) — Возвращает nil. yesno ( nil , false ) — Возвращает nil. yesno ( 'foo' , true ) — Возвращает true.
Чтобы получить только двоичные значения, используйте такой код:true/false
myvariable = yesno ( value или false ) — Если value равно nil, результат равен false. myvariable = yesno ( value или true ) — Если value равно nil, результат равен true. (XXX: если value равно false, результат равен true...) myvariable = yesno ( 'foo' ) или false — Неизвестная строка возвращает nil, результат равен false. myvariable = yesno ( 'foo' , true ) или false — Применяется значение по умолчанию (здесь: true), результат равен true.
Лучшие предложения:
local myvariable = yesno ( value ) if myvariable == nil then -- value равно nil или нераспознанной строке myvariable = true end-- более эффективно, когда value равно nil, но более многословно -- (обратите внимание, что результат по умолчанию должен быть записан дважды) local myvariable if value == nil then myvariable = true else myvariable = yesno ( value , true ) end
-- Функция, позволяющая последовательно обрабатывать вводимые данные викитекста, подобные логическим значениям. -- Работает аналогично шаблону {{yesno}}. return function ( val , default ) -- Если в вашей вики для "yes", "no" и т. д. используются символы, не входящие в набор ASCII, вам -- следует заменить "val:lower()" на "mw.ustring.lower(val)" в -- следующей строке. val = type ( val ) == 'string' и val : lower () или val если val == nil то вернуть nil иначе если val == true или val == 'yes' или val == 'y' или val == 'true' или val == 't' или val == 'on' или tonumber ( val ) == 1 то вернуть true иначе если val == false или val == 'no' или val == 'n' или val == 'false' или val == 'f' или val == 'off' или tonumber ( val ) == 0 то вернуть false иначе вернуть default end end