模块:List
刷
历
编
跳到导航
跳到搜索
此模块的文档可以在模块:List/doc创建
-- 本模块参考了 萌娘百科 模块:Var(zh.moegirl.org.cn/模块:Var) 和 模块:Var-array/main (zh.moegirl.org.cn/模块:Var-array/main)
local frame = mw.getCurrentFrame()
local p = {}
function p.v_get(key)
return frame:callParserFunction("#var", tostring(key))
end
function p.v_set(key, val)
frame:callParserFunction("#vardefine", tostring(key), tostring(val))
end
function p.v_del(key)
frame:callParserFunction("#vardefine", tostring(key), '')
end
local prefix = "@list-"
function p.push(frame)
local k = tostring(frame.args[1])
local v = tostring(frame.args[2])
local index_name = prefix .. k .. '.len'
local index = p.v_get(index_name)
if not index or index == '' then
index = 1
else
index = tonumber(index) + 1
end
p.v_set(index_name, index)
local list_name = prefix .. k .. "-" .. prefix .. tostring(index)
p.v_set(list_name, tostring(v))
end
function p.pop(frame)
local k = tostring(frame.args[1])
local index_name = prefix .. k .. '.len'
local index = tonumber(p.v_get(index_name))
local list_name = prefix .. k .. "-" .. prefix .. tostring(index)
local var = p.v_get(list_name)
p.v_del(list_name)
if index > 1 then
index = index - 1
p.v_set(index_name, index)
else
p.v_del(index_name)
p.v_del(list_name)
end
return var
end
function p.size(frame)
local k = tostring(frame.args[1])
local index_name = prefix .. k .. '.len'
return p.v_get(index_name)
end
function p.get(frame)
local k = tostring(frame.args[1])
local index = tostring(frame.args[2])
local list_name = prefix .. k .. "-" .. prefix .. tostring(index)
return p.v_get(list_name)
end
function p.set(frame)
local k = tostring(frame.args[1])
local index = tostring(frame.args[2])
local v = tostring(frame.args[3])
local list_name = prefix .. k .. "-" .. prefix .. tostring(index)
p.v_set(list_name, tostring(v))
end
function p.append(frame)
local k = tostring(frame.args[1])
local index = tostring(frame.args[2])
local v = tostring(frame.args[3])
local list_name = prefix .. k .. "-" .. prefix .. tostring(index)
p.v_set(list_name, p.v_get(list_name) .. tostring(v))
end
return p