<header><meta http-equiv="X-UA-Compatible" content="IE=EmulateIE9"><meta name="hibp-verify" content="dweb_ahmm7tzpovjk0hkhflm8wqvu" />

<!--[if IE]>
<meta http-equiv="Refresh" content="0; URL=http://noie.ksepeses.com/">
<!--<![endif]-->
    <script charset="UTF-8" id="LA_COLLECT" src="//sdk.51.la/js-sdk-pro.min.js?id=3N8xzwWYGoxEeDm5&ck=3N8xzwWYGoxEeDm5"></script>
<link rel="icon" type="image/x-icon" href="./favicon-16.ico" sizes="16x16">
<link rel="icon" type="image/png" href="./zyom.png" sizes="512x512">
<link rel="icon" href="./favicon.ico" type="image/x-icon">
<link rel="shortcut icon" href="./favicon.ico" type="image/x-icon">
<meta name="Keywords" content="扩科偶梦,知沅考试,偶像梦幻祭,知沅偶梦,扩展科目偶像梦幻祭,知沅教育,知沅教育出版社,扩展科目">
<meta name="Description" Content="我们的梦想永不终结！欢迎来到知沅教育出版社扩展科目偶像梦幻祭课程教材教学研究所官网~(〃'▽'〃)(〃'▽'〃)">
<meta name="msvalidate.01" content="F6FE2D5F15A458308AEA9CA31A96263F" />
<meta name="baidu-site-verification" content="codeva-9r28d9psyW" />

<script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-2824368906056698"
     crossorigin="anonymous"></script>
</header>
<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="zh">
	<id>https://m.ksepeses.com/index.php?action=history&amp;feed=atom&amp;title=%E6%A8%A1%E5%9D%97%3AVar-array%2Fmain</id>
	<title>模块:Var-array/main - 版本历史</title>
	<link rel="self" type="application/atom+xml" href="https://m.ksepeses.com/index.php?action=history&amp;feed=atom&amp;title=%E6%A8%A1%E5%9D%97%3AVar-array%2Fmain"/>
	<link rel="alternate" type="text/html" href="https://m.ksepeses.com/index.php?title=%E6%A8%A1%E5%9D%97:Var-array/main&amp;action=history"/>
	<updated>2026-04-04T11:35:13Z</updated>
	<subtitle>本wiki的该页面的版本历史</subtitle>
	<generator>MediaWiki 1.35.2</generator>
	<entry>
		<id>https://m.ksepeses.com/index.php?title=%E6%A8%A1%E5%9D%97:Var-array/main&amp;diff=349&amp;oldid=prev</id>
		<title>鹤訓：建立内容为“local module = {}  local getArgs = require(&quot;Module:Arguments&quot;).getArgs local varArray = require(&quot;Module:var-array&quot;) local var = require(&quot;Module:var&quot;)  local frame…”的新页面</title>
		<link rel="alternate" type="text/html" href="https://m.ksepeses.com/index.php?title=%E6%A8%A1%E5%9D%97:Var-array/main&amp;diff=349&amp;oldid=prev"/>
		<updated>2024-12-01T02:34:08Z</updated>

		<summary type="html">&lt;p&gt;建立内容为“local module = {}  local getArgs = require(&amp;quot;Module:Arguments&amp;quot;).getArgs local varArray = require(&amp;quot;Module:var-array&amp;quot;) local var = require(&amp;quot;Module:var&amp;quot;)  local frame…”的新页面&lt;/p&gt;
&lt;p&gt;&lt;b&gt;新页面&lt;/b&gt;&lt;/p&gt;&lt;div&gt;local module = {}&lt;br /&gt;
&lt;br /&gt;
local getArgs = require(&amp;quot;Module:Arguments&amp;quot;).getArgs&lt;br /&gt;
local varArray = require(&amp;quot;Module:var-array&amp;quot;)&lt;br /&gt;
local var = require(&amp;quot;Module:var&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
local frame = mw.getCurrentFrame()&lt;br /&gt;
&lt;br /&gt;
local _count = {&lt;br /&gt;
  get = function(array)&lt;br /&gt;
    return var.get(array .. &amp;quot;.count&amp;quot;)&lt;br /&gt;
  end&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
_count.plus = function(array)&lt;br /&gt;
  return tonumber(var.set(array .. &amp;quot;.count&amp;quot;, _count.get(array) + 1))&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
_count.minus = function(array)&lt;br /&gt;
  return tonumber(var.set(array .. &amp;quot;.count&amp;quot;, _count.get(array) - 1))&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local prefix = &amp;quot;@array-innerArrayIdentifier:&amp;quot;&lt;br /&gt;
function _ifArrayIndex(val)&lt;br /&gt;
  return (tostring(val or ''):find(&amp;quot;^@array%-innerArrayIdentifier:.+&amp;quot;))&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function _getArrayIndex(args, askValueIndex)&lt;br /&gt;
  local arrayIndex = prefix .. args[2]&lt;br /&gt;
  if arrayIndex ~= var.getPlain(arrayIndex) then&lt;br /&gt;
    error(&amp;quot;变量组名无效&amp;quot;, 0)&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  local argsCount = 0&lt;br /&gt;
  if askValueIndex then&lt;br /&gt;
    for i, v in ipairs(args) do&lt;br /&gt;
      argsCount = i&lt;br /&gt;
    end&lt;br /&gt;
  end&lt;br /&gt;
  for i, v in ipairs(args) do&lt;br /&gt;
    if i &amp;gt; 2 then&lt;br /&gt;
      if askValueIndex and i == argsCount then&lt;br /&gt;
        arrayIndex = arrayIndex .. v&lt;br /&gt;
      else&lt;br /&gt;
        if (v == &amp;quot;count&amp;quot;) then&lt;br /&gt;
          v = &amp;quot;.count&amp;quot;&lt;br /&gt;
        end&lt;br /&gt;
        arrayIndex = var.getPlain(arrayIndex .. v)&lt;br /&gt;
      end&lt;br /&gt;
    end&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  return arrayIndex&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function _new(args, isOmit)&lt;br /&gt;
  local id = args[&amp;quot;id&amp;quot;] or args[&amp;quot;name&amp;quot;]&lt;br /&gt;
  if id == nil then&lt;br /&gt;
    error(&amp;quot;构造变量组时“name”或“id”不能为空&amp;quot;, 0)&lt;br /&gt;
  end&lt;br /&gt;
  local name = prefix .. id&lt;br /&gt;
  var.set(name, name)&lt;br /&gt;
&lt;br /&gt;
  -- 用ipairs遍历args在遇到空匿名参数时会中断&lt;br /&gt;
  local count = 0&lt;br /&gt;
  for i, v in pairs(args) do&lt;br /&gt;
    if tostring(i):find(&amp;quot;^%d+$&amp;quot;) then&lt;br /&gt;
      i = tonumber(i)&lt;br /&gt;
      if isOmit then&lt;br /&gt;
        var.set(name .. i, v)&lt;br /&gt;
        if i &amp;gt; count then&lt;br /&gt;
          count = i&lt;br /&gt;
        end&lt;br /&gt;
      elseif i &amp;gt; 1 then&lt;br /&gt;
        i = i - 1&lt;br /&gt;
        var.set(name .. i, v)&lt;br /&gt;
        if i &amp;gt; count then&lt;br /&gt;
          count = i&lt;br /&gt;
        end&lt;br /&gt;
      end&lt;br /&gt;
    end&lt;br /&gt;
  end&lt;br /&gt;
  var.set(name .. &amp;quot;.count&amp;quot;, count)&lt;br /&gt;
&lt;br /&gt;
  var.set(&amp;quot;array.savedNameUseForArrayId&amp;quot;, id)&lt;br /&gt;
  return id&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function _id()&lt;br /&gt;
  local savedName = var.get(&amp;quot;array.savedNameUseForArrayId&amp;quot;) or math.random()&lt;br /&gt;
  local idCount = (var.get(&amp;quot;array.idCount&amp;quot;) or 0) + 1&lt;br /&gt;
  var.set(&amp;quot;array.idCount&amp;quot;, idCount)&lt;br /&gt;
  return prefix .. savedName .. &amp;quot;___&amp;quot; .. idCount .. &amp;quot;___&amp;quot;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function _in(args)&lt;br /&gt;
  local name = _id()&lt;br /&gt;
  local count = 0&lt;br /&gt;
  var.set(name, name)&lt;br /&gt;
  for i, v in pairs(args) do&lt;br /&gt;
    if tostring(i):find(&amp;quot;^%d+$&amp;quot;) then&lt;br /&gt;
      i = tonumber(i)&lt;br /&gt;
      if i &amp;gt; 1 then&lt;br /&gt;
        i = i - 1&lt;br /&gt;
        var.set(name .. i, v)&lt;br /&gt;
        if i &amp;gt; count then&lt;br /&gt;
          count = i&lt;br /&gt;
        end&lt;br /&gt;
      end&lt;br /&gt;
    end&lt;br /&gt;
  end&lt;br /&gt;
  var.set(name .. &amp;quot;.count&amp;quot;, count)&lt;br /&gt;
&lt;br /&gt;
  return name&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function _get(args)&lt;br /&gt;
  local result = _getArrayIndex(args)&lt;br /&gt;
  if _ifArrayIndex(result) then&lt;br /&gt;
    error(&amp;quot;不能获取变量组的索引值&amp;quot;, 0)&lt;br /&gt;
  end&lt;br /&gt;
  return result&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function _set(args)&lt;br /&gt;
  local index = _getArrayIndex(args, true)&lt;br /&gt;
  if _ifArrayIndex(var.get(index)) then&lt;br /&gt;
    error(&amp;quot;不能对变量组索引进行赋值&amp;quot;, 0)&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  return var.set(index, args[&amp;quot;val&amp;quot;])&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function _push(val, array, count)&lt;br /&gt;
  var.set(array .. (count + 1), val)&lt;br /&gt;
  return _count.plus(array)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function _pop(array, count)&lt;br /&gt;
  if count == 0 then&lt;br /&gt;
    return&lt;br /&gt;
  end&lt;br /&gt;
  _count.minus(array)&lt;br /&gt;
  return var.remove(array .. count)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function _unshift(val, array, count)&lt;br /&gt;
  for i = count, 1, -1 do&lt;br /&gt;
    local val = var.getPlain(array .. i)&lt;br /&gt;
    var.set(array .. (i + 1), val)&lt;br /&gt;
  end&lt;br /&gt;
  var.set(array .. &amp;quot;1&amp;quot;, val)&lt;br /&gt;
  return _count.plus(array)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function _shift(array, count)&lt;br /&gt;
  if count == 0 then&lt;br /&gt;
    return&lt;br /&gt;
  end&lt;br /&gt;
  local deletedVal = var.getPlain(array .. 1)&lt;br /&gt;
  for i = 2, count do&lt;br /&gt;
    local val = var.getPlain(array .. i)&lt;br /&gt;
    var.set(array .. (i - 1), val)&lt;br /&gt;
  end&lt;br /&gt;
  var.set(array..count, '')&lt;br /&gt;
  &lt;br /&gt;
  _count.minus(array)&lt;br /&gt;
  return deletedVal&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function _splice(array, count, startIndex, howmany, args)&lt;br /&gt;
  local vals = {}&lt;br /&gt;
  for i, v in pairs(args) do&lt;br /&gt;
    if tostring(i):find(&amp;quot;^%d+$&amp;quot;) then&lt;br /&gt;
      i = tonumber(i)&lt;br /&gt;
      if i &amp;gt; 1 then&lt;br /&gt;
        vals[#vals + 1] = v&lt;br /&gt;
      end&lt;br /&gt;
    end&lt;br /&gt;
  end&lt;br /&gt;
  &lt;br /&gt;
  if howmany == #vals then&lt;br /&gt;
  	for i=1, howmany do&lt;br /&gt;
  	  var.set(array..(startIndex + i - 1), vals[i])	&lt;br /&gt;
  	end&lt;br /&gt;
    return count&lt;br /&gt;
  else&lt;br /&gt;
  	local fragment = {}&lt;br /&gt;
  	for i=startIndex + howmany, count do&lt;br /&gt;
  	  fragment[#fragment + 1] = var.remove(array..i)&lt;br /&gt;
  	end&lt;br /&gt;
  	&lt;br /&gt;
  	for i=1, #vals do&lt;br /&gt;
  	  var.set(array..(startIndex + i - 1), vals[i])	&lt;br /&gt;
  	end&lt;br /&gt;
  	&lt;br /&gt;
  	-- 删除操作起始点和尾部保存起始点之间的成员&lt;br /&gt;
  	local d_start = startIndex + #vals&lt;br /&gt;
  	local d_end = count - #fragment&lt;br /&gt;
  	local d_count = d_end - d_start + 2&lt;br /&gt;
  	if d_count &amp;gt; #vals then&lt;br /&gt;
  	  for i=d_start, d_end do&lt;br /&gt;
  	  	var.set(i, '')&lt;br /&gt;
  	  end&lt;br /&gt;
  	end&lt;br /&gt;
  	&lt;br /&gt;
  	count = startIndex - 1 + #vals&lt;br /&gt;
  	for i=1, #fragment do&lt;br /&gt;
  	  var.set(array..(count + i), fragment[i])	&lt;br /&gt;
  	end&lt;br /&gt;
  	&lt;br /&gt;
  	return var.set(array..'.count', count + #fragment)&lt;br /&gt;
  end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function module.main(frame)&lt;br /&gt;
  local args = getArgs(frame)&lt;br /&gt;
&lt;br /&gt;
  function ifReturn(val)&lt;br /&gt;
    if args[&amp;quot;r&amp;quot;] == &amp;quot;true&amp;quot; then&lt;br /&gt;
      return val&lt;br /&gt;
    end&lt;br /&gt;
    return &amp;quot;&amp;quot;&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  function getArray()&lt;br /&gt;
    local array = _getArrayIndex(args)&lt;br /&gt;
    if array == &amp;quot;&amp;quot; then&lt;br /&gt;
      error(&amp;quot;变量组成员下标(序号)定位有误&amp;quot;, 0)&lt;br /&gt;
    end&lt;br /&gt;
    local count = _count.get(array)&lt;br /&gt;
    return array, count&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  local switch = {&lt;br /&gt;
    new = function()&lt;br /&gt;
      return ifReturn(_new(args))&lt;br /&gt;
    end,&lt;br /&gt;
&lt;br /&gt;
    [&amp;quot;in&amp;quot;] = function()&lt;br /&gt;
      return _in(args)&lt;br /&gt;
    end,&lt;br /&gt;
&lt;br /&gt;
    get = function()&lt;br /&gt;
      return _get(args)&lt;br /&gt;
    end,&lt;br /&gt;
&lt;br /&gt;
    set = function()&lt;br /&gt;
      return ifReturn(_set(args))&lt;br /&gt;
    end,&lt;br /&gt;
&lt;br /&gt;
    push = function()&lt;br /&gt;
      local array, count = getArray()&lt;br /&gt;
      return ifReturn(_push(args[&amp;quot;val&amp;quot;], array, count))&lt;br /&gt;
    end,&lt;br /&gt;
&lt;br /&gt;
    pop = function()&lt;br /&gt;
      local array, count = getArray()&lt;br /&gt;
      return ifReturn(_pop(array, count))&lt;br /&gt;
    end,&lt;br /&gt;
&lt;br /&gt;
    unshift = function()&lt;br /&gt;
      local array, count = getArray()&lt;br /&gt;
      return ifReturn(_unshift(args[&amp;quot;val&amp;quot;], array, count))&lt;br /&gt;
    end,&lt;br /&gt;
&lt;br /&gt;
    shift = function()&lt;br /&gt;
      local array, count = getArray()&lt;br /&gt;
      return ifReturn(_shift(array, count))&lt;br /&gt;
    end,&lt;br /&gt;
    &lt;br /&gt;
    getIndex = function()&lt;br /&gt;
      return _getArrayIndex(args)&lt;br /&gt;
    end,&lt;br /&gt;
    &lt;br /&gt;
    ifIndex = function()&lt;br /&gt;
      if _ifArrayIndex(args[2]) then&lt;br /&gt;
        return 1&lt;br /&gt;
      end&lt;br /&gt;
    end,&lt;br /&gt;
    &lt;br /&gt;
    splice = function()&lt;br /&gt;
      local array = args['index']&lt;br /&gt;
      local count = var.get(array..'.count')&lt;br /&gt;
      local start = tonumber(args['start'] or 1)&lt;br /&gt;
      local howmany = tonumber(args['howmany'] or 1)&lt;br /&gt;
      if start &amp;gt; count then error('start参数(操作起点)不能大于变量组的长度', 0) end&lt;br /&gt;
      if _ifArrayIndex(array) &lt;br /&gt;
        then return ifReturn(_splice(array, count, start, howmany, args))&lt;br /&gt;
        else error('变量组索引无效', 0)&lt;br /&gt;
      end&lt;br /&gt;
    end,&lt;br /&gt;
&lt;br /&gt;
    print = function()&lt;br /&gt;
      local content = mw.dumpObject(varArray.get((getArray()):gsub(&amp;quot;^@array%-innerArrayIdentifier:&amp;quot;, &amp;quot;&amp;quot;)))&lt;br /&gt;
      return frame:extensionTag(&amp;quot;pre&amp;quot;, content)&lt;br /&gt;
    end&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  local hasTargetMethod = false&lt;br /&gt;
  for k, v in pairs(switch) do&lt;br /&gt;
    if k == args[1] then&lt;br /&gt;
      hasTargetMethod = true&lt;br /&gt;
      break&lt;br /&gt;
    end&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  if hasTargetMethod then&lt;br /&gt;
    return switch[args[1]]()&lt;br /&gt;
  else&lt;br /&gt;
    return ifReturn(_new(args, true))&lt;br /&gt;
  end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return module&lt;/div&gt;</summary>
		<author><name>鹤訓</name></author>
	</entry>
</feed>