lua中__index
时间: 2023-07-31 11:11:58 浏览: 112
在Lua中,`__index`是一个元方法(metamethod),用于处理表的访问操作。当你尝试访问一个表中不存在的字段时,Lua会去检查该表的`__index`元方法。如果存在`__index`元方法,Lua会调用该元方法来处理这个访问操作。
`__index`可以是一个函数,也可以是一个表。当`__index`是一个函数时,Lua会将表本身和要访问的字段名作为参数传递给该函数,并使用函数的返回值作为访问操作的结果。当`__index`是一个表时,Lua会在该表中查找与字段名相对应的值,并使用找到的值作为访问操作的结果。
使用`__index`可以实现一些有趣的功能,例如实现面向对象编程的特性,或者实现默认值等。下面是一个简单的示例:
```lua
-- 创建一个表
local myTable = {name = "John"}
-- 创建元表
local myMetatable = {
-- 定义__index函数
__index = function(table, key)
if key == "age" then
return 30
end
end
}
-- 将元表设置给myTable
setmetatable(myTable, myMetatable)
-- 访问myTable中的字段
print(myTable.name) -- 输出 "John"
print(myTable.age) -- 输出 30(因为age字段不存在于myTable中,所以调用了__index函数)
```
在上面的示例中,当我们尝试访问`myTable`中的`age`字段时,由于`age`字段不存在于`myTable`中,Lua会调用元表`myMetatable`中的`__index`函数,并返回默认值30。
阅读全文