Lua - 初始化空表的正确方法

在Lua中,

table[1] = var
table = { var }

这两种方式的区别是什么?为什么第二种方式更安全?如果对于这两种情况,table或var为nil会发生什么?谢谢!

点赞
用户2858170
用户2858170

不要命名你的表为 tabletable 是 Lua 的表库。

table[1] = var 实际上不会创建一个新的表。它将 var 赋值给表库的表中的第一个字段。

你需要在插入字段之前创建一个表。

local t = {var} 创建一个包含单个元素 var 的新表。如果 var 是空的,表就是空的。

local t = {}
t[1] = var

两个步骤都可以实现同样的效果,但没有一个更"安全"。第一个更简短,你不必手动编号元素。

在某些情况下,如果你想引用该表,就不能在表构造函数 {} 中初始化字段。

2021-05-17 09:26:50
用户11740758
用户11740758

对我来说,构造表格的最佳方式是简单的:setmetatable()

它返回第一个参数并将第二个参数设置为元表。

下面是一些在控制台中操作的示例...

# /usr/local/bin/lua -i
Lua 5.4.3  Copyright (C) 1994-2021 Lua.org, PUC-Rio
> -- 空表
> my_table=setmetatable({},empty)
> my_table
table: 0x56677820
> -- 带有 __name 的空表
> my_table=setmetatable({},{__name='my_table'})
> my_table
my_table: 0x56677850
> -- 带有 __name 和 __index 表元方法的空表
> my_table=setmetatable({},{__name='my_table',__index=table})
> my_table:insert(math.pi)
> my_table:concat()
3.1415926535898

而我最喜欢的析构函数是:my_table=empty

如果要仅销毁现有表中的元表,请使用:

my_table=setmetatable(my_table,empty)

2021-06-06 09:50:42