Module:ProcessArgs: Difference between revisions
创建页面,内容为“local p = {} function p.norm( origArgs ) if type( origArgs ) ~= 'table' then origArgs = mw.getCurrentFrame():getParent().args end local args = {} for k, v in pairs( origArgs ) do v = mw.text.trim( tostring( v ) ) if v ~= '' then args[k] = v end end return args end function p.merge( origArgs, parentArgs, norm ) if type( origArgs ) ~= 'table' then norm = origArgs local f = mw.getCurrentFrame() origArgs = f.args parentArgs = f:getPar…” |
m 1 revision imported |
(No difference)
|
Latest revision as of 12:29, 1 November 2024
该模块将参数添加到一个表中以便模块使用。
用法
该模块通常只能在其他模块中调用,否则会出错。
norm函数
<syntaxhighlight lang="lua"> require('Module:ProcessArgs').norm(origArgs) </syntaxhighlight>
origArgs
:可选(表),用于指定args
表,默认值为父框架[注 1]的args
表。值为其他类型(包括nil
)时取默认值。
该函数会将origArgs
表中所有值的多余空字符删去(若表中某个值全部由空字符组成,则将其设置为nil
),并返回修改后的表。
merge函数
<syntaxhighlight lang="lua"> require('Module:ProcessArgs').merge(origArgs,parentArgs,norm) </syntaxhighlight>
origArgs
:可选(表),用于指定args
表,默认值为当前框架[注 2]的args
表。值为其他类型(包括nil
)时先用该值覆盖norm
的值,然后取默认值。parentArgs
:可选(表),用于指定args
表,当origArgs
不是表时默认值为父框架[注 1]的args
表。值为其他类型(包括nil
)时会出错。norm
:可选(布尔值),用于指定是否将表中全部由空字符组成的值设置为nil
。当origArgs
不是表时取origArgs
的值。
该函数会将origArgs
和parentArgs
这两个表合并(若两个表有相同的键,则优先取parentArgs
中的值),同时将表中所有值的多余空字符删去,并返回合并后的表。
示例
假设模块:Example包含以下代码:
<syntaxhighlight lang="lua"> local p = {} function p.args(f) local arg1 = require('Module:ProcessArgs').norm() local arg2 = require('Module:ProcessArgs').norm(f.args) local arg3 = require('Module:ProcessArgs').merge(true) return mw.allToString(arg1[1],arg2[2],arg2['args'],arg3.name) end return p </syntaxhighlight>
Template:Example包含以下代码:
-{}-{{#invoke:Example|args|foo| bar |ba z|name= na me }}
页面Example包含以下代码:
-{}-{{Example| a rg1 |2=arg2|args=abc }}
那么页面Example将会显示:
a rg1 bar nil na me
local p = {}
function p.norm( origArgs )
if type( origArgs ) ~= 'table' then
origArgs = mw.getCurrentFrame():getParent().args
end
local args = {}
for k, v in pairs( origArgs ) do
v = mw.text.trim( tostring( v ) )
if v ~= '' then
args[k] = v
end
end
return args
end
function p.merge( origArgs, parentArgs, norm )
if type( origArgs ) ~= 'table' then
norm = origArgs
local f = mw.getCurrentFrame()
origArgs = f.args
parentArgs = f:getParent().args
end
local args = {}
for k, v in pairs( origArgs ) do
v = mw.text.trim( tostring( v ) )
if not norm or norm and v ~= '' then
args[k] = v
end
end
for k, v in pairs( parentArgs ) do
v = mw.text.trim( v )
if not norm or norm and v ~= '' then
args[k] = v
end
end
return args
end
return p