本站页面(多半)转载自
萌娘百科
的同名页面,依CC BY-NC-SA 3.0引入,贡献者可以在历史页查询。
因各种原因页面内容可能和源页面有所出入,
非本站特有页面内容请以萌娘百科为准
。此外,因萌百的api限制,本站部分页面和图片同步自
另一个镜像站
。
置顶公告:
【置顶】关于临时开启评论区所有功能的公告(2022.10.22)
|
【置顶】关于本站Widget恢复使用的公告
你好~!欢迎来到萌娘百科镜像站!
如需查看或编辑,请联系本站管理员注册账号。
本镜像站和其他萌娘百科的镜像站
无关
,请注意分别。
查看“Module:Var-array/main”的源代码
←
Module:Var-array/main
跳到导航
跳到搜索
因为以下原因,您没有权限编辑本页:
您请求的操作仅限属于该用户组的用户执行:
用户
此页面已被保护以防止编辑或其他操作。
您可以查看和复制此页面的源代码。
高级
特殊字符
帮助
标题
2级
3级
4级
5级
格式
插入
拉丁字母
扩展拉丁字母
国际音标
符号
希腊字母
希腊字母扩展
西里尔字母
阿拉伯字母
扩展阿拉伯字母
希伯来字母
孟加拉语字符集
泰米尔数字和符号
泰卢固语字符集
僧伽罗语字符集
梵文字符集
古吉拉特语字符集
泰语字符集
老挝语
高棉语字母
加拿大原住民音节文字
卢恩
Á
á
À
à
Â
â
Ä
ä
Ã
ã
Ǎ
ǎ
Ā
ā
Ă
ă
Ą
ą
Å
å
Ć
ć
Ĉ
ĉ
Ç
ç
Č
č
Ċ
ċ
Đ
đ
Ď
ď
É
é
È
è
Ê
ê
Ë
ë
Ě
ě
Ē
ē
Ĕ
ĕ
Ė
ė
Ę
ę
Ĝ
ĝ
Ģ
ģ
Ğ
ğ
Ġ
ġ
Ĥ
ĥ
Ħ
ħ
Í
í
Ì
ì
Î
î
Ï
ï
Ĩ
ĩ
Ǐ
ǐ
Ī
ī
Ĭ
ĭ
İ
ı
Į
į
Ĵ
ĵ
Ķ
ķ
Ĺ
ĺ
Ļ
ļ
Ľ
ľ
Ł
ł
Ń
ń
Ñ
ñ
Ņ
ņ
Ň
ň
Ó
ó
Ò
ò
Ô
ô
Ö
ö
Õ
õ
Ǒ
ǒ
Ō
ō
Ŏ
ŏ
Ǫ
ǫ
Ő
ő
Ŕ
ŕ
Ŗ
ŗ
Ř
ř
Ś
ś
Ŝ
ŝ
Ş
ş
Š
š
Ș
ș
Ț
ț
Ť
ť
Ú
ú
Ù
ù
Û
û
Ü
ü
Ũ
ũ
Ů
ů
Ǔ
ǔ
Ū
ū
ǖ
ǘ
ǚ
ǜ
Ŭ
ŭ
Ų
ų
Ű
ű
Ŵ
ŵ
Ý
ý
Ŷ
ŷ
Ÿ
ÿ
Ȳ
ȳ
Ź
ź
Ž
ž
Ż
ż
Æ
æ
Ǣ
ǣ
Ø
ø
Œ
œ
ß
Ð
ð
Þ
þ
Ə
ə
格式
链接
标题
列表
文件
参考
讨论
说明
输入内容
输出结果
斜体
''斜体文字''
斜体文字
粗体
'''粗体文字'''
粗体文字
粗斜体
'''''粗斜体文字'''''
粗斜体文字
local module = {} local getArgs = require("Module:Arguments").getArgs local varArray = require("Module:var-array") local var = require("Module:var") local frame = mw.getCurrentFrame() local _count = { get = function(array) return var.get(array .. ".count") end } _count.plus = function(array) return tonumber(var.set(array .. ".count", _count.get(array) + 1)) end _count.minus = function(array) return tonumber(var.set(array .. ".count", _count.get(array) - 1)) end local prefix = "@array-innerArrayIdentifier:" function _ifArrayIndex(val) return (tostring(val or ''):find("^@array%-innerArrayIdentifier:.+")) end function _getArrayIndex(args, askValueIndex) local arrayIndex = prefix .. args[2] if arrayIndex ~= var.getPlain(arrayIndex) then error("变量组名无效", 0) end local argsCount = 0 if askValueIndex then for i, v in ipairs(args) do argsCount = i end end for i, v in ipairs(args) do if i > 2 then if askValueIndex and i == argsCount then arrayIndex = arrayIndex .. v else if (v == "count") then v = ".count" end arrayIndex = var.getPlain(arrayIndex .. v) end end end return arrayIndex end function _new(args, isOmit) local id = args["id"] or args["name"] if id == nil then error("构造变量组时“name”或“id”不能为空", 0) end local name = prefix .. id var.set(name, name) -- 用ipairs遍历args在遇到空匿名参数时会中断 local count = 0 for i, v in pairs(args) do if tostring(i):find("^%d+$") then i = tonumber(i) if isOmit then var.set(name .. i, v) if i > count then count = i end elseif i > 1 then i = i - 1 var.set(name .. i, v) if i > count then count = i end end end end var.set(name .. ".count", count) var.set("array.savedNameUseForArrayId", id) return id end function _id() local savedName = var.get("array.savedNameUseForArrayId") or math.random() local idCount = (var.get("array.idCount") or 0) + 1 var.set("array.idCount", idCount) return prefix .. savedName .. "___" .. idCount .. "___" end function _in(args) local name = _id() local count = 0 var.set(name, name) for i, v in pairs(args) do if tostring(i):find("^%d+$") then i = tonumber(i) if i > 1 then i = i - 1 var.set(name .. i, v) if i > count then count = i end end end end var.set(name .. ".count", count) return name end function _get(args) local result = _getArrayIndex(args) if _ifArrayIndex(result) then error("不能获取变量组的索引值", 0) end return result end function _set(args) local index = _getArrayIndex(args, true) if _ifArrayIndex(var.get(index)) then error("不能对变量组索引进行赋值", 0) end return var.set(index, args["val"]) end function _push(val, array, count) var.set(array .. (count + 1), val) return _count.plus(array) end function _pop(array, count) if count == 0 then return end _count.minus(array) return var.remove(array .. count) end function _unshift(val, array, count) for i = count, 1, -1 do local val = var.getPlain(array .. i) var.set(array .. (i + 1), val) end var.set(array .. "1", val) return _count.plus(array) end function _shift(array, count) if count == 0 then return end local deletedVal = var.getPlain(array .. 1) for i = 2, count do local val = var.getPlain(array .. i) var.set(array .. (i - 1), val) end var.set(array..count, '') _count.minus(array) return deletedVal end function _splice(array, count, startIndex, howmany, args) local vals = {} for i, v in pairs(args) do if tostring(i):find("^%d+$") then i = tonumber(i) if i > 1 then vals[#vals + 1] = v end end end if howmany == #vals then for i=1, howmany do var.set(array..(startIndex + i - 1), vals[i]) end return count else local fragment = {} for i=startIndex + howmany, count do fragment[#fragment + 1] = var.remove(array..i) end for i=1, #vals do var.set(array..(startIndex + i - 1), vals[i]) end -- 删除操作起始点和尾部保存起始点之间的成员 local d_start = startIndex + #vals local d_end = count - #fragment local d_count = d_end - d_start + 2 if d_count > #vals then for i=d_start, d_end do var.set(i, '') end end count = startIndex - 1 + #vals for i=1, #fragment do var.set(array..(count + i), fragment[i]) end return var.set(array..'.count', count + #fragment) end end function module.main(frame) local args = getArgs(frame) function ifReturn(val) if args["r"] == "true" then return val end return "" end function getArray() local array = _getArrayIndex(args) if array == "" then error("变量组成员下标(序号)定位有误", 0) end local count = _count.get(array) return array, count end local switch = { new = function() return ifReturn(_new(args)) end, ["in"] = function() return _in(args) end, get = function() return _get(args) end, set = function() return ifReturn(_set(args)) end, push = function() local array, count = getArray() return ifReturn(_push(args["val"], array, count)) end, pop = function() local array, count = getArray() return ifReturn(_pop(array, count)) end, unshift = function() local array, count = getArray() return ifReturn(_unshift(args["val"], array, count)) end, shift = function() local array, count = getArray() return ifReturn(_shift(array, count)) end, getIndex = function() return _getArrayIndex(args) end, ifIndex = function() if _ifArrayIndex(args[2]) then return 1 end end, splice = function() local array = args['index'] local count = var.get(array..'.count') local start = tonumber(args['start'] or 1) local howmany = tonumber(args['howmany'] or 1) if start > count then error('start参数(操作起点)不能大于变量组的长度', 0) end if _ifArrayIndex(array) then return ifReturn(_splice(array, count, start, howmany, args)) else error('变量组索引无效', 0) end end, print = function() local content = mw.dumpObject(varArray.get((getArray()):gsub("^@array%-innerArrayIdentifier:", ""))) return frame:extensionTag("pre", content) end } local hasTargetMethod = false for k, v in pairs(switch) do if k == args[1] then hasTargetMethod = true break end end if hasTargetMethod then return switch[args[1]]() else return ifReturn(_new(args, true)) end end return module
调试控制台
* 此模块的返回的值存于控制台变量“p”中,包括没有保存的变更。 * 在一行的前面加上“=”可以将其作为表达式来计算或使用print()显示。显示表格请使用mw.logObject()。 * 在模块代码中使用mw.log()和mw.logObject()来向控制台发送消息。
本页使用的模板:
Template:Documentation
(
查看源代码
)(仅允许管理员和巡查姬)
Template:Documentation/docname
(
查看源代码
)
Module:Var-array/main/doc
(
查看源代码
)
返回
Module:Var-array/main
。
导航菜单
个人工具
登录
命名空间
模块
讨论
English
已展开
已折叠
查看
阅读
查看源代码
查看历史
更多
已展开
已折叠
搜索
导航
首页
随机页面
最近更改
最新文件
萌娘原味图裤
讨论版
帮助
帮助
沙盒
Wiki入门
萌百编辑教程
编辑规范
萌娘百科政策
创建新条目
请求创建条目
常见问题集
分类索引
作品
人物
组织
概念用语
设定
软件
活动
工具
链入页面
相关更改
特殊页面
页面信息
返回顶部