Lua 中实现面向对象
下面看看怎样继承:
发布日期:2021-06-30 19:38:41
浏览次数:2
分类:技术文章
本文共 1396 字,大约阅读时间需要 4 分钟。
转载注明出处:
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_typeend现在,我们来看看怎么使用:
base_type=class() -- 定义一个基类 base_type function base_type:ctor(x) -- 定义 base_type 的构造函数 print("base_type ctor") self.x=xend 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 ,这个函数被重载了。
转载地址:https://linxinfa.blog.csdn.net/article/details/51833541 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
路过按个爪印,很不错,赞一个!
[***.219.124.196]2024年04月19日 08时02分34秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
ACM 2017 南宁区域赛 Rake it in(对抗搜索)
2019-04-30
CodeForces - 931B World Cup (思维 模拟)
2019-04-30
CodeForces - 996D Suit and Tie (暴力)
2019-04-30
ACM 2017 香港区域赛 E - Base Station Sites(二分)
2019-04-30
ACM 2018 青岛区域赛 J-Books (模拟)
2019-04-30
ACM 2016 沈阳区域赛 E - Counting Cliques (dfs)
2019-04-30
ACM 2017 北京区域赛 J-Pangu and Stones(区间dp)
2019-04-30
HDU - 5643 King's Game (约瑟夫环变式)
2019-04-30
UVA - 1452 Jump (约瑟夫环变式)
2019-04-30
POJ - 3517 And Then There Was One (约瑟夫环变式)
2019-04-30
HDU - 2068 RPG的错排 (错排+组合数)
2019-04-30
CodeForces 591C Median Smoothing(思维 模拟)
2019-04-30
ES6学习笔记(十四)module的简单使用
2019-04-30
Keras设置Top5精度
2019-04-30
记录Ubuntu18.04服务器密码忘记或被篡改如何重置密码
2019-04-30
对os.listdir获取到的文件夹或者文件进行重新排序
2019-04-30
再记录一次安装GPU版的Keras的过程
2019-04-30
2019年11月~2020年7月CCF会议列表-计算机视觉&计算机图形学
2019-04-30
leecode-中位数
2019-04-30