尝试构建一个表格,但是一直得到带有索引值的数组
2017-12-27 21:2:18
收藏:0
阅读:108
评论:2
所以我想要构建以下内容的东西(表格 t0)
{
l1 = {
['t1'] = function(params) print('t1) end,
['t2'] = function(params) print('t2') end
},
l2 = {
['t3'] = function(params) print('t3') end
}
}
但是每次尝试像这样做查找
t0.l1[#t0.l1+1] = { ['t1'] = function(params) print('t1) end }
它最终变成了一个带有索引值的数组:
l1 table: 0x...
1 table: 0x... ({ ['t1'] = function(params) print('t1) end })
2 table: 0x... ({ ['t2'] = function(params) print('t1) end })
如何插入并使一个表格成为一个数组而不是一个表格的数组?
点赞
用户6020403
有几件事情需要拆解,下面逐一说明:
- 你提到的表格是一个内含许多关联数组的关联数组。
- "t0.l1[#t0.l1+1] =" 的意思是 “找出我们正在使用的 t0.l1 数组中的记录编号,加一并将其赋值给 RHS 所在的索引”。
根据定义,第二行代码只会给一个有编号的索引赋值,这与你举例不符。要创建你提到的内含许多关联数组的关联数组,你可以使用以下两种方法(假设你想要最终的数组名称是“t0”):
t0 = {
l1 = {
t1 = function(params) print('t1') end,
t2 = function(params) print('t2') end
},
l2 = {
t3 = function(params) print('t3') end
}
}
或者:
t0 = {}
t0["l1"] = {}
t0["l1"]["t1"] = function(params) print('t1') end
t0["l1"]["t2"] = function(params) print('t2') end
t0["l2"] = {}
t0["l2"]["t3"] = function(params) print('t3') end
(你也可以先将值赋给' tmp = {} ... t0["l2"] = tmp')。
这两种方法都能得到你所需的结果(假设你需要的是包含多个关联数组的关联数组)。
2017-12-27 22:10:13
评论区的留言会收到邮件通知哦~
推荐文章
- 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 代码?

当你执行
t0.l1[#t0.l1+1] = { ['t1'] = function(params) print('t1') end }你正在将新表 {t1=function() end} 插入到 t0.l1 表的第一个索引位置。这是因为目前为止,#t0.l1 的值为0,因为在 t0.l1 中,你使用了两个具有独立键的元素(所以你将 t0.l1 用作字典),而 # 运算符仅适用于列表(不适用于字典)。所以现在你有 3 个元素,一个位于索引位置1,其他两个位于索引位置 t1 和 t2。