跳转到内容

Module:Yesno/doc

勤求古训,博采众方

这是Module:Yesno的文档页面

本模块提供用于处理布尔值或形似布尔值的字符串输入的统一接口。Lua 允许使用 truefalse 布尔值,而 wiki 模板仅能通过 "yes"、"no" 等字符串表达布尔值。本模块将这些字符串转换为 Lua 可处理的布尔值。对于 nil 输入,仍返回 nil,以便区分 nilfalse。本模块同样接受 Lua 自身的结构(布尔值、数字、表、函数)作为输入。如果传入的值无法识别,可指定一个返回的默认值。

语法

yesno(value, default)

value 是需要测试的值。布尔值输入或形似布尔值的输入(见下)总是视为 truefalsenil 总是视为 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)