加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

Lua 中实现面向对象

发布时间:2020-12-14 22:10:52 所属栏目:大数据 来源:网络整理
导读:这里提供? Lua ?中实现 OO 的一种方案: local _class= { } ? function class ( super ) local class_type= } class_type.ctor= false class_type.super=superclass_type.new= function ( ... ) local obj= } do local createcreate = ( c,... ) if c.super
这里提供? 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 = (c,...)
					if c.super then
						create(c.super,0)">end
					if c.ctor then
						c.ctor(obj,0)">end
				end
?
				create(class_type,102)">)
			end
			setmetatable{ __index=_class[class_type] }return obj
		end
	local vtbl=}
	_class]=vtbl
?
	{__newindex=
		(t,k,v)
			vtbl[k]=v
		end
	)
?
	if super then
		(vtbl,102)">{__index=
			)
				local ret=_class[super]]
				vtbl]=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 (self.x) function base_type:hello-- 定义另一个成员函数 base_type:hello "hello base_type"以上是基本的 class 定义的语法,完全兼容 lua 的编程习惯。我增加了一个叫做 ctor 的词,作为构造函数的名字。
下面看看怎样继承:
test=class(base_type-- 定义一个类 test 继承于 base_type ? function test:ctor-- 定义 test 的构造函数 "test ctor"function test:hello-- 重载 base_type:hello 为 test:hello "hello test"现在可以试一下了:
a=test.new(1-- 输出两行,base_type ctor 和 test ctor 。这个对象被正确的构造了。 a:print_x-- 输出 1 ,这个是基类 base_type 中的成员函数。 a:hello-- 输出 hello test ,这个函数被重载了。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读