Lua元表__index字段实际含义是什么?为何可赋值为表而非函数?
Lua元表__index字段的两种用法
Lua的__index元方法并非只能是函数,它还可以是一个表,这是官方支持的特性,也是Lua面向对象编程里实现继承的常用写法。
当你把__index设为一个表(比如示例里的A)时,Lua的执行逻辑是这样的:
- 当访问某个表(比如B)中不存在的键(比如
greet)时,Lua会自动去__index指定的表里查找对应的键值 - 这完全等价于你写的函数版本:
只不过Lua帮你内置实现了这个查找逻辑,不用手动写函数,代码更简洁。__index = function(_, key) return A[key] end
回到你的示例:
- 调用
B.greet()时,发现B本身没有greet这个键 - 于是触发B的元表的
__index逻辑,因为__index指向A,Lua就去A里找greet - 找到A中定义的
greet函数,直接调用它,所以输出hello world
这种写法正是Lua里实现原型继承的核心方式,通过把子类的元表__index指向父类表,就能让子类继承父类的所有属性和方法。
内容的提问来源于stack exchange,提问作者BreezyMain
相关产品推荐
相关产品推荐

