跳转到内容

模块:Yesno/doc

勤求古训,博采众方
鹿野耕云​(留言 | 贡献)2026年6月21日 (日) 09:08的版本
(差异) ←上一版本 | 最后版本 (差异) | 下一版本→ (差异)

这是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)