Lua 中用table表来实现类,继承,以及面向对象

本文介绍了如何在Lua中利用table来模拟类和面向对象编程,包括类方法的调用、self关键字的应用、构造函数new的使用,以及通过元表实现继承。通过实例详细阐述了类的创建、调用、继承和方法覆盖的过程。
摘要由CSDN通过智能技术生成

Lua没有类这一说,但是可以使用表来接近实现类的功能,实现面向对象
这里依次用表以类的形式写

注意:
一个模板在一个文件里,一个模块可看成是个表,表可以写成类的形式
本文的类实际是一个table类型的表,这里是一个类用一个单独的lua文件来存放

1. 在外界调用类方法

外界的变量获取到类后可以直接调用类方法

1.1创建一个文件ClassA,写objA类:

这些全局方法在表被获取后可以直接调用被外界调用

objA = {MyTest2 = 1} -- MyTest2可以通过表名.获取
new = 0 -- 不是objA表里的字段
MyTest = 0
objA.test = 666 -- 是objA表里的字段,可以在表外直接定义赋值修改
function objA.Play()
    print("objA.play")
end
function objA.Sum(num1,num2)
    return num1+num2
end
function objA.ADD(qwq)
    MyTest = qwq --外界可以用方法赋值,但是无法通过表获取,需要用return返回
    return MyTest
end 

这可以说是一个简单的模块,不过没有返回值,一个模块可以看成是一个表,有return就是返回这个表
但是模块里最好不要定义表以外的变量了。
用require()获取文件中的那个模块(也就是开始定义的表A)
require()也可以看出是导入和引用类似C的include() C#的using java的Import (个人理解)
可以到菜鸟网上看看关于模块:http://www.runoob.com/lua/lua-modules-packages.html

1.2 外界获取的全局类,可以直接用类名.调用类的方法

新建一个文件Main,使用ClassA的类objA
Main文件可以直接用表名点函数来使用,可以说这里的objA是objA类的一个对象

--这里因为没写return,可以直接用那个ClassA模块的表名点出来使用
require("classA")
objA.Play()
print(objA.Sum(10,20))
objA.new = 10
print(objA.new)--10看起来可以直接在外部修改,但实际并不是对模块的new操作,而是在表里新添一个字段
print(objA.MyTest) 
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值