如何在没有 `n` 键的情况下模仿 Lua 的 table.pack()

How to mimic Lua's table.pack() without `n` key

我正在尝试重写我自己的 tablePack() 函数,return 是 table 而没有 n

例如,调用 tablePack(1, 2, 3) 应该 return a table {1, 2, 3}.

如何创建 tablePack() 函数?如有任何建议,我们将不胜感激。


已添加:

这是一个示例代码:

local a = table.pack(1,2,3)
local b = {1,2,3}

print(a.n, b.n)

结果:

3   nil

我如何创建自己的 tablePack() 函数以便结果如下?

nil  nil

ADDED2:

这是解决方案吗?

function tablePack(...)
  local r = table.pack(...)
  r.n = nil
  return r;
end

也许这样更好?

function ofTable(...)
  return {...}
end

请忽略我之前的回答

您将 n 设置为 nil 的示例完全可以接受并且会起作用。

(代码错误,请忽略:)

您可以简单地 return 省略号:

function tablePack(...)
    return ...;
end

还有这个:

function tablePack(...)
   local n = select("#", ...);
   local t = debug.getinfo(0);
   for k in pairs(t) do
      t[k] = nil;
   end
   for i = 1, n do
      local e = select(i, ...);
      table.insert(t, e);
   end
   return t;
end

local t = tablePack(1,2,3);

print("length: " .. #t);

for e in pairs(t) do
   print(e);
end

您的 ofTable 解决方案是最好的。

table.pack 在某些参数可能是 nil 时很有用。 n 字段可以让您检测 ... 中包含的尾随 nil 或应对 #ipairs 和大多数 [=18] =] 函数将不起作用。