lua中利用__index元方法来实现继承

在Lua中,通过table模拟类并利用__index元方法实现继承。创建一个table作为基类,设置元表让子类的未知成员查询转向基类。当访问table不存在的key时,_index元方法会被调用,它可以是table或函数,用于查找或定义成员。
在lua中要想模拟类的继承,就需要用到lua元表的_index元方法。
原理就是当我们查找一个table中不存在的元素时,会调用_index元方法来执行一套查找机制,凭借这个机制来模拟类
似的继承行为。

lua中没有类的概念,但是我们可以用table来模拟类,首先我们创建一个table来当类,里面有一个a来做这个类的成员

当我们访问这个类的成员时会打印出来成员的值,如果访问这个类中不存在的成员,则会打印nil。

class = {
a = 1
}
print(class.a) --结果是1
print(class.b) --结果是nil

然后我们再创建一个table,打算把它当做父类。

bassClass = {
b = 2
}

这时候需要对两个table进行操作就需要用到元表metatable了,把bassClass设为class的元表,把bassClass的元方法指向自己。

这样一个简单的继承就实现了。

bassClass = {
b = 2
}
class = {
a = 1
}
setmetatable(class, bassClass)
bassClass.__index = bassClass
print(class.a) --结果是1
print(class.b) --结果是2

_index主要用于table的查询,当访问一个table的key时,会首先检查该table中是否有该key的字段,有则返回值,没有

则会检查元表中是否有_index元方法,没有则返回nil,有的话如果_index是一个table,那么就到_index方法所指的table中查找对应的属性和方法

_index元方法不一定是table,也可以是一个函数,如果是一个函数,将返回该函数的返回值。




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值