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)