variables - 调用时未找到在表中使用表作为变量名
问题描述
我正在做相当复杂的事情,我正在尝试使用表作为变量名,因为我发现 lua 可以使用它,即:
lua
{[{1,2}]="Meep"}
问题是它是可调用的,当我这样做并尝试使用相同类型的表调用它时,它不会找到它。
我试过寻找它等等,但我不知道为什么它不会这样做。
ua
local c = {[{1,2}]="Meep"}
print(c[{1,2}],c)
我是否期望成为,但事实并非如此。
"Meep",{[{1,2}]="Meep"}
但我得到的是
nil,{[{1,2}]="Meep"}
如果我尝试
lua
local m={1,2}
local c = {[m]="Meep"}
print(c[m],c)
它变成了正确的,有没有办法避免那个中间人?毕竟m=={1,2}
会返回true。
解决方案
您遇到的问题是lua 中的表表示为引用。如果您比较两个不同的表格,您就是在比较这些参考资料。因此,仅true
当给定的表完全相同时,该等式才成立。
t = { 1, 2, 3 }
t2 = { 1, 2, 3 }
print(t == t) -- true
print(t2 == t) -- false
print(t2 == t2) -- true
由于这个事实,您可以在每个引用的函数中传递它们。
function f(t)
t[1] = 5
end
t2 = { 1 }
f(t2)
print(t2[1]) -- 5
要绕过此行为,您可以(如评论中建议的那样)在将表用作键之前对其进行序列化。
推荐阅读
- asp.net-core - 奇怪的弹出行为
- c# - 如何按顺序执行任意数量的异步任务?
- php - While uploading Excel File in Laravel, throws error Allowed memory size of 536870912 bytes exhausted (tried to allocate 33554432 bytes)
- javascript - 检查相对路径是否存在
- sql-server - 如果存在则按值分组,否则按同一列的另一个值分组
- c - 将行拆分为单词并使用 strtok 将它们放入 char 数组中
- php - Return all rows from an array
- sql - Use a column as the input parameter to a function and add results to table
- javascript - Flow type: either one property is required or the other
- sql-server - Call stored procedure using ODBC from PHP running on Linux - odbc_prepare not working