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

在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,也可以是一个函数,如果是一个函数,将返回该函数的返回值。




猜你喜欢

转载自blog.csdn.net/qq_36512517/article/details/80216276