lua中的rawset函数

Sim*_*aur 4 lua

lua中的rawset函数一般是传递表,索引和值,但我遇到了这段代码:

rawset(tbl,name,{})
Run Code Online (Sandbox Code Playgroud)

rawset(tbl,name, function() end)
Run Code Online (Sandbox Code Playgroud)

Rawset函数返回一个表,那么在rawset函数中有一个表或函数来表示值是什么意思?

lhf*_*lhf 5

Lua表可以包含所有类型的值,包括表和函数,它们可以是异构的:并非所有值都必须属于同一类型.

http://www.lua.org/manual/5.2/manual.html#2.1.


Oli*_*ver 2

来自参考手册:

rawset (table, index, value):将 table[index] 的实际值设置为 value,而不调用任何元方法。table 必须是一个表,索引任何不同于 nil 的值,并且赋值任何 Lua 值。

这意味着什么:

  • 不使用表的元表:这就是为什么它是“原始”集,直接添加字段;如果没有 raw,表的元表将用于处理“set”操作;
  • 索引任何不同于 nil 的值:在 Lua 中,这实际上意味着除 nil 之外的任何类型的 Lua 对象:数字、函数、另一个表等(Lua 参考手册列出了所有类型);
  • value 任意 Lua 值:与之前相同,但甚至可以为 nil:如果设置为 nil,则有效地从表中删除项目。

所以索引是名称只是表明该表是一个关联数组(除非名称是一个数字,但这会产生误导),在第一种情况下,关联值是另一个表,在第二种情况下,它是一个Lua函数。