模組: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)