如何模仿 Lua 的 table.pack() 不使用 `n` 键
我正在尝试重写自己的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()函数,以便结果可以如下所示?
nil nil
添加2:
这是解决方案吗?
function tablePack(...)
local r = table.pack(...)
r.n = nil
return r;
end
也许这更好?
function ofTable(...)
返回{...}
end
你的 ofTable 解决方案是最好的。
当某些参数可能是 nil 时,table.pack 很有用。 n 字段会让你检测 ... 中包含的尾随 nil,或应对 #,ipairs 和大多数 table 函数不起作用的事实。
```lua -- 定义一个局部函数unpack,如果函数unpack不存在,则将table.unpack赋值给unpack local unpack = unpack or table.unpack
-- 定义一个函数SafePack,用于将参数封装到一个table中,记录参数的个数 function SafePack(...) local params = {...} params.n = select('#', ...) return params end
-- 定义一个函数SafeUnpack,用于将一个安全的参数table展开 function SafeUnpack(safe_pack_tb) return unpack(safe_pack_tb, 1, safe_pack_tb.n) end
-- 定义一个函数ConcatSafePack,用于将两个安全的参数table拼接成一个 function ConcatSafePack(safe_pack_l, safe_pack_r) local concat = {} for i = 1,safe_pack_l.n do concat[i] = safe_pack_l[i] end for i = 1,safe_pack_r.n do concat[safe_pack_l.n + i] = safe_pack_r[i] end concat.n = safe_pack_l.n + safe_pack_r.n return concat end
-- 使用SafePack和SafeUnpack来替换它们
- Lua 虚拟机加密load(string.dump(function)) 后执行失败问题如何解决
- 我想创建一个 Nginx 规则,禁止访问
- 如何将两个不同的lua文件合成一个 东西有点长 大佬请耐心看完 我是小白研究几天了都没搞定
- 如何在roblox studio中1:1导入真实世界的地形?
- 求解,lua_resume的第二次调用继续执行协程问题。
- 【上海普陀区】内向猫网络招募【Skynet游戏框架Lua后端程序员】
- SF爱好求教:如何用lua实现游戏内调用数据库函数实现账号密码注册?
- Lua实现网站后台开发
- LUA错误显式返回,社区常见的规约是怎么样的
- lua5.3下载库失败
- 请问如何实现文本框内容和某个网页搜索框内容连接,并把网页输出来的结果反馈到另外一个文本框上
- lua lanes多线程使用
- 一个kv数据库
- openresty 有没有比较轻量的 docker 镜像
- 想问一下,有大佬用过luacurl吗
- 在Lua执行过程中使用Load函数出现问题
- 为什么 neovim 里没有显示一些特殊字符?
- Lua比较两个表的值(不考虑键的顺序)
- 有个lua简单的项目,外包,有意者加微信 liuheng600456详谈,最好在成都
- 如何在 Visual Studio 2022 中运行 Lua 代码?

请忽略我之前的回答。
你将 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