Lua中的Rawset函数

Lua 中的 rawset 函数通常传递表格、索引和值,但我遇到了以下代码:

rawset(tbl, name, {})

rawset(tbl, name, function() end)

Rawset 函数返回一个表格,那么在值的位置上使用表格或函数是什么意思?

点赞
用户107090
用户107090

Lua表格可以包含各种类型的值,包括表格和函数,它们可以是异构的:并非所有的值都需要是相同的类型。

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

2014-04-11 12:20:11
用户869951
用户869951

从参考手册中:

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

这意味着什么:

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

因此,索引作为名称仅表示表格是一种关联数组(除非名称是数字,但这将是有误导性的),在第一种情况下,关联值是另一个表格,在第二种情况下,它是Lua函数。

2014-04-11 14:40:33