跳至內容

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