如何在没有 `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] =] 函数将不起作用。
我正在尝试重写我自己的 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] =] 函数将不起作用。