Lua - 初始化为空的正确方法 table
Lua - right way to init empty table
Lua有什么区别:
table[1] = var
table = { var }
为什么第二种选择更安全?如果 table 或 var 在这两种情况下都为 nil 会发生什么?谢谢!
不要命名您的 table table
。 table
是 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)
Lua有什么区别:
table[1] = var
table = { var }
为什么第二种选择更安全?如果 table 或 var 在这两种情况下都为 nil 会发生什么?谢谢!
不要命名您的 table table
。 table
是 Lua 的 table 库。
table[1] = var
实际上不会创建新的 table。它会将 var 分配给 table 库的 table.
您需要创建一个 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)