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

时间:2019-08-11 05:22:14

标签: lua lua-table

我正在尝试重写自己的(Rec - 159,Rec - 160).split(",") 函数,该函数返回不包含tablePack()的表。

例如,调用n应该返回一个表tablePack(1, 2, 3)

如何创建{1, 2, 3}函数?任何建议将不胜感激。


添加:

这是示例代码:

tablePack()

结果:

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

print(a.n, b.n)

我如何创建自己的3 nil 函数,以便得到以下结果?

tablePack()

ADDED2:

这是解决方案吗?

nil  nil

也许这更好?

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

2 个答案:

答案 0 :(得分:2)

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

当某些参数可能为table.pack时,

nil很有用。 n字段可让您检测nil中包含的尾随...,或处理#ipairs和大多数{{1 }}功能不起作用。

答案 1 :(得分:0)

请忽略我以前的答案。

您将n设置为nil的示例完全可以接受,并且可以正常工作。

(错误代码,请忽略:)

您可以简单地返回省略号:

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