lua __newindex
时间: 2023-10-22 19:06:52 浏览: 170
`__newindex` 是 Lua 中的一个元方法,用于控制对表中不存在的索引的赋值行为。当我们尝试给一个表中不存在的键赋值时,Lua 会自动调用该表的 `__newindex` 元方法并将键和值作为参数传递给它。
我们可以通过在表中定义一个 `__newindex` 函数来定制化对表中不存在键的赋值行为。比如,我们可以在 `__newindex` 函数中检查键的合法性或者记录下对表的修改等操作。下面是一个例子:
```lua
local myTable = {}
local mt = {
__newindex = function(table, key, value)
print("Assigning value " .. value .. " to key " .. key)
rawset(table, key, value)
end
}
setmetatable(myTable, mt)
myTable.foo = "bar"
```
在上面的例子中,我们定义了一个新的表 `myTable`,并为其设置了一个元表 `mt`,其中定义了 `__newindex` 函数。当我们尝试为 `myTable` 表中不存在的键 `foo` 赋值时,Lua 会自动调用 `__newindex` 函数,并将键 `foo` 和值 `"bar"` 作为参数传递给它。在 `__newindex` 函数中,我们打印出了赋值操作的相关信息,并使用 `rawset` 函数将键值对加入到表中。注意,在 `__newindex` 函数中如果我们直接使用 `table[key] = value` 的方式赋值,会导致递归调用 `__newindex` 函数,从而陷入死循环,因此我们需要使用 `rawset` 函数来避免这种问题。
阅读全文