1. __index 的值是table
other = { foo = 3 }
origin = {key1 = "value1"}
setmetatable(origin ,{ __index = other } )
2. __index 的值是函数
other = { foo = 3 }
origin = {key1 = "value1"}
setmetatable(origin , {
__index = function(origin , key)
if key == "key2" then
return "metatablevalue"
else
return nil
end
end
})
总结
Lua查找一个表元素时的规则,其实就是如下3个步骤:
- 1.在表中查找,如果找到,返回该元素,找不到则继续
- 2.判断该表是否有元表,如果没有元表,返回nil,有元表则继续。
- 3.判断元表有没有__index方法,如果__index方法为nil,则返回nil;如果__index方法是一个表,则重复1、2、3;如果__index方法是一个函数,则返回该函数的返回值。
扩展阅读:
1.Lua 元表(Metatable) (值得看)