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 ,这个函数被重载了。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |