跳至內容

模組:Yesno/doc

勤求古訓,博采眾方
鹿野耕云​(留言 | 貢獻)2026年6月20日 (六) 23:56的修訂 (基于 zhwiki 创建 Yesno 文档,补充 t/f/on/off 值)
(差異) ←上個修訂 | 最新修訂 (差異) | 下個修訂→ (差異)

此頁面為 Module:Yesno 的說明文件

Template:High-risk Template:Module rating 本模塊提供用於處理布爾值或形似布爾值的字符串輸入的統一接口。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)
yesno()

字符串在匹配前會轉換為小寫:

-- 始终返回 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)