模块:Yesno/doc
外观
这是Module:Yesno的文档页面
本模块提供用于处理布尔值或形似布尔值的字符串输入的统一接口。Lua 允许使用 true 和 false 布尔值,而 wiki 模板仅能通过 "yes"、"no" 等字符串表达布尔值。本模块将这些字符串转换为 Lua 可处理的布尔值。对于 nil 输入,仍返回 nil,以便区分 nil 和 false。本模块同样接受 Lua 自身的结构(布尔值、数字、表、函数)作为输入。如果传入的值无法识别,可指定一个返回的默认值。
语法
yesno(value, default)
value 是需要测试的值。布尔值输入或形似布尔值的输入(见下)总是视为 true 或 false,nil 总是视为 nil,其他值一律返回 default。
用法
首先加载模块。注意只能由其他 Lua 模块加载,普通 wiki 页面请使用 {{yesno}} 模板。
local yesno = require('Module:Yesno')
以下值始终返回 true:
yesno('yes')
yesno('y')
yesno('true')
yesno('t')
yesno('on')
yesno('1')
yesno(1)
yesno(true)
yesno('是')
yesno('开')
yesno('開')
以下值始终返回 false:
yesno('no')
yesno('n')
yesno('false')
yesno('f')
yesno('off')
yesno('0')
yesno(0)
yesno(false)
yesno('否')
yesno('关')
yesno('關')
nil 值始终返回 nil:
yesno(nil)
字符串在匹配前会转换为小写:
-- 始终返回 true:
yesno('Yes')
yesno('YES')
yesno('yEs')
yesno('Y')
yesno('tRuE')
yesno('ON')
-- 始终返回 false:
yesno('No')
yesno('NO')
yesno('nO')
yesno('N')
yesno('fALsE')
yesno('OFF')
未定义值
如果 yesno 收到上面未列出的值,可指定默认值。不提供默认值时返回 nil。
-- 以下返回 nil:
yesno('foo')
yesno({})
yesno(5)
yesno(function() return '这是函数' end)
-- 以下返回 true:
yesno('foo', true)
yesno({}, true)
yesno(5, true)
yesno(function() return '这是函数' end, true)
-- 以下返回 "bar":
yesno('foo', 'bar')
yesno({}, 'bar')
yesno(5, 'bar')
yesno(function() return '这是函数' end, 'bar')
空白字符串同样按未定义处理:
yesno('') -- 返回 nil
yesno('', true) -- 返回 true
yesno('', 'bar') -- 返回 "bar"
尽管空字符串在 wikitext 中通常等价于 false,但 Lua 视其为非空。本模块遵循 Lua 行为。如果需要将空字符串视为 false,请在传入前过滤,例如 Module:Arguments 默认会移除空白参数。
处理 nil
根据定义:
yesno(nil) -- 返回 nil
yesno('foo') -- 返回 nil
yesno(nil, true) -- 返回 nil(nil 不走默认值)
yesno(nil, false) -- 返回 nil
yesno('foo', true) -- 返回 true
要获得纯粹的 true/false 二元值,推荐以下模式:
-- 清晰写法:显式处理 nil
local result = yesno(value)
if result == nil then
result = true -- nil 时的回退值
end
-- 简洁写法:默认 false
result = yesno(value or false, false)
-- 简洁写法:默认 true
result = yesno(value or true, true)