在 pil 中,lua 的作者推荐了一种方案来实现 OO,比较简洁,但是我依然觉得有些繁琐。
这里给出一种更漂亮一点的解决方案:为了贴代码和修改方便,我把它贴在了 wiki 上。
Lua 中实现面向对象
在这个方案中,只定义了一个函数 class(super) ,用这个函数,我们就可以方便的在 lua 中定义类:
base_type=class() -- 定义一个基类 base_type
function base_type:ctor(x) -- 定义 base_type 的构造函数
print("base_type ctor")
self.x=x
end
function base_type:print_x() -- 定义一个成员函数 base_type:print_x
print(self.x)
end
function base_type:hello() -- 定义另一个成员函数 base_type:hello
print("hello base_type")
end
以上是基本的 class 定义的语法,完全兼容 lua 的编程习惯。我增加了一个叫做 ctor 的词,作为构造函数的名字。
下面看看怎样继承: test=class(basetype) -- 定义一个类 test 继承于 basetype
function test:ctor() -- 定义 test 的构造函数
print("test ctor")
end
function test:hello() -- 重载 base_type:hello 为 test:hello
print("hello test")
end
现在可以试一下了:
a=test.new(1) -- 输出两行,base_type ctor 和 test ctor 。这个对象被正确的构造了。
a:print_x() -- 输出 1 ,这个是基类 base_type 中的成员函数。
a:hello() -- 输出 hello test ,这个函数被重载了。
其实,实现多重继承也并不复杂,这里就不再展开了。更有意义的扩展可能是增加一个 dtor :)
ps. 这里用了点小技巧,将 self 绑定到 closure 上,所以并不使用 a:hello 而是直接用 a.hello 调用成员函数。这个技巧并不非常有用,从效率角度上说,还是不用为好。
分享到:
相关推荐
在Lua中实现面向对象编程(OOP)虽然不像其他静态类型语言那样直接,但通过元表和元方法的概念,同样可以构建出具有类和对象的结构。 面向对象编程的基本概念包括类、对象、继承、封装和多态。在Lua中,这些概念的...
在本文中,我们将深入探讨“Lua面向对象封装”这一主题,结合给定的文件名“CC_Object.lua”和“Luatest1.lua”,推测这是关于在Lua中实现面向对象编程(OOP)的示例代码。 首先,让我们理解Lua中的面向对象编程。...
这个"Lua面向对象.zip"文件包含了关于如何在Lua中实现面向对象编程的代码实例,可以帮助我们深入理解这一概念。 1. **元表和元方法** Lua中的对象通常由表(table)表示,而表的元表(metatable)则是实现OOP的...
在Lua中实现面向对象编程(OOP)不是原生支持的特性,但可以通过库来实现。在这个主题中,我们将关注两个重要的类库:middleclass和stateful。 首先,我们来看`middleclass`库,它是Lua中最常用的一个面向对象实现...
在 Lua 中实现面向对象编程(Object-Oriented Programming,简称 OOP)虽然不如某些其他语言那样直接,但仍然提供了强大的机制来支持这一概念。在 "Lua 面向对象" 的文档中,我们将深入探讨 Lua 如何通过元表和原型...
Lua 虽然不是专门设计用于 OOP 的语言,但其灵活的语法和强大的元表功能使得在 Lua 中实现面向对象编程成为可能。 #### OOP 的核心概念 **类(Class)**:类是一个创建对象的可扩展模板,定义了一组属性(成员变量)...
总的来说,"Lua面向对象封装好的基类Class"为Lua开发者提供了一个方便的工具,使他们能够在不支持原生面向对象语法的环境中实现面向对象编程,从而更好地组织代码和设计复杂系统。通过理解和利用这类基类,开发者...
总的来说,"luaclass简单例子"涵盖了如何在Lua中实现面向对象编程的基本思路,包括类的模拟、对象的创建和方法的定义。通过`classheader.lua`、`Team.lua`和`TeamMgr.lua`这三份文件,我们可以看到一个从基础类模板...
在Lua中,面向对象编程主要通过元表(metatable)和伪构造器(__index和__newindex)来实现。元表是Lua中一个特殊的数据结构,它可以关联到任何表(即对象)上,控制该表的行为。当访问表中不存在的字段时,会触发元...
通过阅读和学习这两个文件,你可以更好地理解如何在Lua中实现面向对象编程,以及如何利用`BjaClassTool`来构建复杂的类结构。 总的来说,`BjaClassTool`是一个强大的工具,它通过模仿面向对象编程的关键概念,如类...
在Lua编程语言中,虽然原生不支持传统的类(class)和...通过这些技巧,我们可以在Lua中灵活地实现面向对象编程,尽管它不是原生支持的。这种灵活性也使得Lua成为游戏开发和其他需要轻量级脚本语言的场景中的首选工具。
- **简述**:探讨了如何在Lua中实现面向对象编程,包括类和对象的概念。 - **知识点**: - 类的定义和实例化。 - 继承和多态性的实现。 - 面向对象设计模式的应用。 **第17章 Weak表** - **简述**:讲解了弱表...
在LUA语言中,面向对象编程(Object-Oriented Programming, OOP)是一种重要的编程范式,它允许开发者组织代码并创建可复用的代码结构。与传统的面向过程编程不同,OOP通过对象的概念来管理数据和行为。尽管LUA不像...
【描述】中的信息进一步确认了这个库专注于在Lua中实现面向对象的概念,使得开发者能够以更加结构化的方式编写代码,提升代码的可读性和可维护性。30log通过提供类、对象以及继承等概念,让开发者能够在Lua中享受到...
用lua面向对象编程,如何在lua中写c++中的类
面向对象编程(Object Oriented Programming,OOP)是软件开发中的一种重要编程范式,它...在 Lua 的面向对象编程中,利用表和 `self` 关键字,开发者可以实现类似其他支持 OOP 语言的功能,尽管它没有内置的类结构。
分析源码,我们可以学习如何在Lua中实现面向对象的设计模式。 通过深入研究“RandomLuaStuff”的源码,开发者不仅可以提升对Lua语言的理解,还能获取实际项目中的实践经验,这对于任何希望在Lua领域深化技能的人来...
2. **表与面向对象编程**:Lua中的表不仅是动态数组,还能实现关联数组,支持元表和元方法,是实现面向对象编程的关键。 3. **函数与模块**:Lua中的函数是第一类公民,可以作为参数传递,也可以作为返回值。同时,...
元表是Lua中实现面向对象编程的关键,它允许我们为任何类型定义自定义的行为。元方法是通过元表调用的方法,例如,当尝试对表格执行算术操作时,会触发相应的元方法。 8. **垃圾回收** Lua采用引用计数加可达性...
第四版进一步强化了这些特性,使得在Lua中进行面向对象编程变得更加自然。 第三部分:Lua的模块化与库 Lua的标准库提供了许多实用功能,例如字符串处理、数学运算、文件操作等。从第二版开始,Lua引入了require函数...