• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

Lua实现面向对象两种方法

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

lua面向对象编程是基于元表metatable,元方法__index来实现的
通过元表的__index元方法,将一个table的__index元方法设置为另一个table,那么后者的方法就被前者继承

如果访问了lua表中不存在的元素时,就会触发lua的一套查找机制,也是凭借这个机制,才能够实现面向对象的
总结元表的查找步骤:
步骤1.在表中查找,如果找到,返回该元素,找不到则继续步骤2
步骤2.判断该表是否有元表,如果没有元表,返回nil,有元表则继续步骤3
步骤3.判断元表有没有__index方法,如果__index方法为nil,则返回nil;如果__index方法是一个表,则重复步骤1、2、3;如果__index方法是一个函数,则调用该函数,并返回该函数的返回值

  • 元表像是一个备用查找表,假设表A的元表是B,那么在A中找不到的东西就会尝试在B中去找,设置元表的函数如下
  •  setmetatable(A, B),这样表B就被设置为A的元表,当A中查找不到某个变量时就会到B中进行查找
  • 元方法__index是用来确定一个表在被作为元表时的查找方法
  • 面向对象的封装

-- 设置新对象的metatable
setmetatable(tempObj,Class)

  • 面向对象的继承和多态

父类:-- 设置metatable的元方法__index,指向表Class自己
Class.__index = Class
-- 设置新对象的metatable,
setmetatable(tempObj,Class)
子类:-- 设置元表为Class
setmetatable(SubClass, Class)
-- 设置metatable的元方法__index,指向表SubClass自己
SubClass.__index = SubClass

2、直接将基类的成员深拷贝给子类

:对外只有class函数,参数为基类的名称,返回一个派生类的对象数据。函数的作用是根据传入的基类,拿到对应的元表来初始化派生类对象的元表,这样在代码运行时,不需要动态向上查找,缺陷在于这样做在对象创建时会消耗更多的时间。


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
Lua相关回调总结【转】发布时间:2022-07-22
下一篇:
[cocos+lua]代码实现翻转效果(水平/竖直)发布时间:2022-07-22
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap