lua继承
本文最后更新于 2026年7月24日 早上
在 Lua 开发中,为了组织复杂逻辑,我们通常需要引入面向对象。
这段代码实现了一个轻量、高效的基类 Object,它支持实例化、继承、混入(Mixin)以及类型检查。
基类定义
1 | |
Object是一个表,作为所有对象的基类。__index元方法指向Object本身,使得实例可以访问基类的方法。
构造函数和实例化
1 | |
Object:new()是一个空方法,子类可以重写它来实现自己的构造逻辑。Object:__call(...)使得Object可以像函数一样被调用来创建实例。它创建一个新的表,设置其元表为Object,然后调用new方法进行初始化。
继承机制
1 | |
- 元方法继承:通过复制父类的元方法(以
__开头的方法),确保子类也能使用这些特殊行为。 cls.super记录父类,方便子类调用父类方法。setmetatable(cls, self)设置子类的元表为父类,实现方法继承。
混入(Mixin)功能
使用 implement 方法可以将多个类的功能混入当前类,增强代码复用性。
1 | |
implement方法接受多个类作为参数,将它们的函数复制到当前类中,前提是当前类没有同名函数。- 这使得我们可以轻松地将不同类的功能组合在一起,而不需要通过复杂的继承层次结构。
类型检查
1 | |
is方法用于检查当前对象是否是某个类的实例。它通过沿着元表链向上递归查找来判断对象的类型,支持多层继承关系。
总结
方法的实际寻找过程:
1 | |
lua继承
https://wttch96.github.io/post/lua/lua继承.html