pos*_*n12 4 arrays lua lua-table
我有一个值表,原则上可以是任意长度:
Points =
{
    "Point #1",
    "Point #5",
    "Point #7",
    "Point #10",
    "Point #5",
    "Point #11",
    "Point #5",
}
我想将它们作为参数传递给函数。
addPath(<sPathName>, <sPoint>, <sPoint>, ...)
现在,通常您可以使用“呼叫”功能。但在我使用的软件中,此功能不可用且不在范围内。
我如何在 Lua 4 中解决这个问题?
[编辑]
以下是我可以使用的功能。
在较新版本的 Lua 中,您将使用unpack,如addPath(sPathName,unpack(Points)),但 Lua 4.0 没有unpack.
如果您可以添加 C 代码,则unpackLua 5.0 在 4.0 中可以正常工作:
static int luaB_unpack (lua_State *L) {
  int n, i;
  luaL_checktype(L, 1, LUA_TTABLE);
  n = lua_getn(L, 1);
  luaL_checkstack(L, n, "table too big to unpack");
  for (i=1; i<=n; i++)  /* push arg[1...n] */
    lua_rawgeti(L, 1, i);
  return n;
}
将此添加到lbaselib.c和此添加到base_funcs:
  {"unpack", luaB_unpack},
如果你不能添加 C 代码,那么你就不走运了,可能会沦为这个黑客:
function unpack(t)
  return t[1],t[2],t[3],t[4],t[5],t[6],t[7],t[8],t[9],t[10]
end
根据需要扩展返回表达式,但您最多只能使用 200 左右。让我们希望addPath首先忽略或停止nil。
你也可以试试这个,它在第一个 nil 处停止,但没有明确的限制(有递归限制,它最多只能处理 250 个表条目):
function unpack(t,i)
        i = i or 1
        if t[i]~=nil then
                return t[i],unpack(t,i+1)
        end
end