`
WinLi
  • 浏览: 50890 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Lua 中实现面向对象实例

阅读更多

这里提供 Lua 中实现 OO 的一种方案:

 

local _class={}
 
function class(super)
	local class_type={}
	class_type.ctor=false
	class_type.super=super
	class_type.new=function(...) 
			local obj={}
			do
				local create
				create = function(c,...)
					if c.super then
						create(c.super,...)
					end
					if c.ctor then
						c.ctor(obj,...)
					end
				end
 
				create(class_type,...)
			end
			setmetatable(obj,{ __index=_class[class_type] })
			return obj
		end
	local vtbl={}
	_class[class_type]=vtbl
 
	setmetatable(class_type,{__newindex=
		function(t,k,v)
			vtbl[k]=v
		end
	})
 
	if super then
		setmetatable(vtbl,{__index=
			function(t,k)
				local ret=_class[super][k]
				vtbl[k]=ret
				return ret
			end
		})
	end
 
	return class_type
end

 

 

现在,我们来看看怎么使用:

 

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(base_type)	-- 定义一个类 test 继承于 base_type
 
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 ,这个函数被重载了。 
 

 

 

 

分享到:
评论

相关推荐

    lua面向对象实现

    在Lua中实现面向对象编程(OOP)虽然不像其他静态类型语言那样直接,但通过元表和元方法的概念,同样可以构建出具有类和对象的结构。 面向对象编程的基本概念包括类、对象、继承、封装和多态。在Lua中,这些概念的...

    Lua面向对象封装

    在本文中,我们将深入探讨“Lua面向对象封装”这一主题,结合给定的文件名“CC_Object.lua”和“Luatest1.lua”,推测这是关于在Lua中实现面向对象编程(OOP)的示例代码。 首先,让我们理解Lua中的面向对象编程。...

    Lua面向对象封装好的基类Class

    总的来说,"Lua面向对象封装好的基类Class"为Lua开发者提供了一个方便的工具,使他们能够在不支持原生面向对象语法的环境中实现面向对象编程,从而更好地组织代码和设计复杂系统。通过理解和利用这类基类,开发者...

    Lua面向对象.zip

    这个"Lua面向对象.zip"文件包含了关于如何在Lua中实现面向对象编程的代码实例,可以帮助我们深入理解这一概念。 1. **元表和元方法** Lua中的对象通常由表(table)表示,而表的元表(metatable)则是实现OOP的...

    Lua支持面向对象代码

    在Lua中,面向对象编程主要通过元表(metatable)和伪构造器(__index和__newindex)来实现。元表是Lua中一个特殊的数据结构,它可以关联到任何表(即对象)上,控制该表的行为。当访问表中不存在的字段时,会触发元...

    Lua 中实现类

    总结一下,在Lua中实现类和面向对象编程的关键点包括: 1. 使用table作为类的结构,包含属性和方法。 2. 使用`__index`元方法实现属性和方法的查找。 3. 定义构造函数`new`,创建类的实例。 4. 通过设置元表实现继承...

    lua面向对象编程类库笔记

    在Lua中实现面向对象编程(OOP)不是原生支持的特性,但可以通过库来实现。在这个主题中,我们将关注两个重要的类库:middleclass和stateful。 首先,我们来看`middleclass`库,它是Lua中最常用的一个面向对象实现...

    Lua 面向对象_luabook_

    在 Lua 中实现面向对象编程(Object-Oriented Programming,简称 OOP)虽然不如某些其他语言那样直接,但仍然提供了强大的机制来支持这一概念。在 "Lua 面向对象" 的文档中,我们将深入探讨 Lua 如何通过元表和原型...

    c++使用lua脚本的实例

    通过"LuaDemo"这个实例,开发者可以学习如何在实际项目中结合C++和Lua,实现更灵活的程序设计。这不仅可以提升代码的可维护性,还能让非C++开发者更容易地参与到项目中,因为Lua的学习曲线相对平缓。 总结来说,C++...

    Lua进阶教程(三)面向对象编程.pdf

    Lua 虽然不是专门设计用于 OOP 的语言,但其灵活的语法和强大的元表功能使得在 Lua 中实现面向对象编程成为可能。 #### OOP 的核心概念 **类(Class)**:类是一个创建对象的可扩展模板,定义了一组属性(成员变量)...

    luaclass简单例子

    总的来说,"luaclass简单例子"涵盖了如何在Lua中实现面向对象编程的基本思路,包括类的模拟、对象的创建和方法的定义。通过`classheader.lua`、`Team.lua`和`TeamMgr.lua`这三份文件,我们可以看到一个从基础类模板...

    lua与C#结合实例

    C#,则是一种面向对象的编程语言,广泛应用于Windows平台的软件开发、游戏引擎和.NET框架。将Lua与C#结合使用,可以充分利用Lua的易用性和灵活性,以及C#的强大性能和丰富的类库,实现高效、可扩展的应用程序。 在...

    linux下lua调用C++的经典实例.rar

    在本实例中,我们首先需要安装Lua5.3。文件"lua-5.3.4.tar.gz"是Lua的源码包,解压后编译安装。通常,编译过程包括以下步骤: 1. 解压:`tar -zxvf lua-5.3.4.tar.gz` 2. 进入源码目录:`cd lua-5.3.4` 3. 配置:`....

    lua实例:任务模块

    Lua是一种轻量级的脚本语言,常用于游戏开发、嵌入式系统和服务器配置等领域。在这个"lua实例:任务模块"中,我们将...通过深入学习和实践这个实例,你可以更好地理解Lua语言的特性和面向对象编程思想在Lua中的应用。

    C#与Lua的结合实例

    C#是Microsoft开发的一种面向对象的编程语言,广泛用于Windows平台上的应用程序、游戏开发和Web服务。而Lua则是一种轻量级的脚本语言,以其简洁的语法、易读易写的特点,常被用作游戏中的嵌入式脚本语言,特别是在...

    Lua中文参考----学习Lua的好资料

    元表则是Lua中实现面向对象编程的关键,通过元表,可以定义对象的行为和继承关系。 3. **函数和闭包**:Lua中的函数是第一类公民,可以作为参数传递、作为返回值返回。闭包则允许函数记住并访问其词法作用域内的...

    Lua中利用元表实现类和多态教程共28页.pdf.zip

    总之,“Lua中利用元表实现类和多态教程”这个资源提供了丰富的信息,帮助开发者深入了解如何在 Lua 中构建面向对象的程序结构。通过学习元表的使用,开发者可以更好地掌握 Lua 语言的灵活性和强大性,这对于编写...

    Lua教程(十二):面向对象编程

    总的来说,尽管Lua不内置面向对象特性,但通过tables和metatables的使用,我们可以实现类似的功能,包括类的声明、实例化、继承和私有成员的管理。这种灵活性使得Lua成为了一个适合各种编程风格的多用途语言。

    luajava实例及jar包,dll动态链接库

    Lua以其轻量级、高效和易于学习的特点,常被用作嵌入式脚本语言,而Java则以其强大的面向对象特性和跨平台能力受到广泛青睐。LuaJava结合两者,让开发者可以在享受Lua的便利性的同时,利用Java的稳定性和丰富库资源...

    lua中文教程,从基础到深入的让你学习lua

    元表是Lua中实现元编程的关键,它可以改变操作符的行为。 再者,我们需要探讨Lua的垃圾回收机制。Lua使用引用计数加可达性检测的方式来自动管理内存,理解这一机制对于编写高效且无内存泄漏的代码至关重要。 此外...

Global site tag (gtag.js) - Google Analytics