Lua在调用其长度时,是否评估嵌套表的值不同?
2018-8-25 0:51:17
收藏:0
阅读:55
评论:2
首先声明,我使用的是repl.it而不是在我的桌面上使用Lua。这可能是问题所在,但我不能确定,因为我没有容易获得另一个Lua解释器。
我有一个较大程序的问题,但在下面的代码段中可以看到同样的问题:
stuff = {}
list = {"hello"}
table.insert(stuff,list)
table.remove(list)
print(unpack(stuff[1]))
运行时,我期望它打印在stuff [1]
处找到的未包装表,这应该是"hello",因为这是我设置list
时的值。使用插入和删除的优选方法(如下所示)会产生相同的结果。
test = {}
help = {"hello"}
test[#test+1] = help
help[#help] = nil
print(unpack(test[1]))
但是,如果我不调用长度而是使用魔术数字或常量,则可以正常工作,如下面的两个示例所示。
what = {}
the = {"hello"}
what[1] = the
the = nil
print(unpack(what[1]))
how = {}
questionmark = {"hello"}
one = 1
what[one] = questionmark
questionmark = nil
print(unpack(what[one]))
最后,使用嵌套表时不存在此问题,例如:
notnested = {}
nottable = "hello"
notnested[#notnested+1] = nottable
nottable = nil
print(notnested[1])
这是上述五个示例的repl.it链接: https://repl.it/@typhirz/LightsalmonDenseCodeview
原文链接 https://stackoverflow.com/questions/52012583
点赞
stackoverflow用户9906784
Nicol Bolas 在我的大型程序中提供了一些见解,这导致了我解决了问题。我使用了 stuff[1] = {unpack(list)}
而不是 stuff[1] = list
,这使它强制创建一个与 list
分离的新表,使我能够稍后操纵 list
而不更改 stuff
中的任何内容。由于这是浅拷贝,它并不适用于所有情况(特别是如果有进一步的嵌套),因此请寻找深拷贝来获得更强大的解决方案。
2018-08-25 00:52:12
评论区的留言会收到邮件通知哦~
推荐文章
- 如何在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 代码?
- addEventListener 返回 nil Lua
- Lua中获取用户配置主目录的跨平台方法
- 如何编写 Lua 模式将字符串(嵌套数组)转换为真正的数组?
```
table.remove(list)
help[#help] = nil
这两行代码与下面这行代码不同:
the = nil
前两行操作存储在变量
list
/help
中的_表格_。而最后一行只是将变量the
赋为nil
。存储在list
/help
中的表也存储在stuff
/test
表中。更改变量与更改存储在变量中的表格_不同_。