- 欢迎加入官方Discord和Telegram群组!
- 我们正在删除政治内容页面,还您一个干净的H萌娘,净化社区的同时也可以让您认真学习和讨论性知识(?
- 不知道接下来该看什么?可以去查阅本站的优质条目
- 如果您在H萌娘上发现某些内容错误/空缺,请勇于修正/添加!编辑H萌娘其实很容易!(由于遭到破坏,自动确认用户外的编辑现在会先审核 )
- 有任何意见、建议、求助都可以在 讨论版 提出!
Module:Var-array
跳到导航
跳到搜索
简介[编辑源代码]
该模块用于在Lua中生成或解析由{{array}}模板构造的数据。
方法[编辑源代码]
new[编辑源代码]
array.new(name, data)
其中,data为一个表(table),内部所有数据必须为数字索引。
返回值:返回传入的name
get[编辑源代码]
array.get(name)
返回值:由array模板构造的数据所组成的表(table)。当名为name的变量组无效时,返回false;若name为nil,则返回nil。
local module = {}
function module.new(name, array)
local frame = mw.getCurrentFrame()
local idCount = frame:callParserFunction( '#var', 'array.idCount', 0)
function foo(name, array)
name = '@array-innerArrayIdentifier:'..name
frame:callParserFunction( '#vardefine', name, name)
for i, v in ipairs(array) do
if type(v) == 'table' then
idCount = idCount + 1
local innerArrayName = name..'___'..idCount..'___'
foo(innerArrayName, v)
v = '@array-innerArrayIdentifier:'..innerArrayName
end
frame:callParserFunction( '#vardefine', name..i, v)
end
frame:callParserFunction( '#vardefine', name..'.count', #array)
end
foo(name, array)
frame:callParserFunction( '#vardefine', 'array.idCount', idCount)
return name
end
function module.get(name)
local frame = mw.getCurrentFrame()
if type(name) == 'nil' then return nil end
local time = 0
function foo(name)
local array = {}
time = time + 1
if time == 1 then
name = '@array-innerArrayIdentifier:'..name
end
local count = frame:callParserFunction( '#var', name..'.count')
if count == '' then return false end
for i=1, count do
local val = frame:callParserFunction('#var', name..i)
if string.find(val, '^@array%-innerArrayIdentifier:') then
array[i] = foo(val)
else
array[i] = val
end
end
return array
end
return foo(name)
end
return module