Lua - 初始化为空的正确方法 table

Lua - right way to init empty table

Lua有什么区别:

table[1] = var 
table = { var }

为什么第二种选择更安全?如果 table 或 var 在这两种情况下都为 nil 会发生什么?谢谢!

不要命名您的 table tabletable 是 Lua 的 table 库。

table[1] = var 实际上不会创建新的 table。它会将 var 分配给 table 库的 table.

中的字段 1

您需要创建一个 table 才能插入字段。

local t = {var} 创建一个包含单个元素 var 的新 table。如果 var 为零,则 table 为空。

local t = {}
t[1] = var

做同样的事情,但分两步进行。 None 其中“更安全”。第一个只是更短,您不必关心手动对元素进行编号。

在某些情况下,如果您想引用 table.

,则无法在 table 构造函数 {} 中初始化字段

对我来说,table 的最佳构造函数很简单:setmetatable()
它 returns 第一个并将第二个参数设置为 metatable.

在控制台中使用的示例...

# /usr/local/bin/lua -i
Lua 5.4.3  Copyright (C) 1994-2021 Lua.org, PUC-Rio
> -- Empty table
> my_table=setmetatable({},empty)
> my_table
table: 0x56677820
> -- Empty table with __name
> my_table=setmetatable({},{__name='my_table'})
> my_table
my_table: 0x56677850
> -- Empty table with __name and __index table metamethods
> my_table=setmetatable({},{__name='my_table',__index=table})
> my_table:insert(math.pi)
> my_table:concat()
3.1415926535898

还有我最喜欢的析构函数:my_table=empty
要从现有 table 中仅销毁元 table,请使用:
my_table=setmetatable(my_table,empty)