Lua 语言本身并没有强大的类库,所以说不可能使用 Lua 独立开发一款程序,Lua语言本身是没有“类和对象”的概念的,但我们可以用Lua的 table,模拟出来了类和对象的关系。
类与对象模拟实现
1.Lua的类实现步骤
①类:就是初始化一个 table
②类中的字段:在 table 的{ }内进行定于,可以指定初始化值
③类中的方法:就是普通函数的语法格式,方法名的语法格式是“类名:方法名”
④self 关键字:作用类似于 C#中的 this
2.对象的实例化
①.类的构造方法:
Person = {name, age, address} --Person类的声明,有初始字段
function Person:New() --构造方法,格式时固定的,也可传递构造参数
local obj = {}
setmetatable(obj, Person) --设置主表
Person.__index = Person --设置子表的索引
return obj --返回主表对象
end
--类中的方法
function Person:Walk()
print(self.name..'正在走向'..self.address) --self的作用类似于C#中的this,特指这个类中的成员
end
New()方法是为了在外界构造该类的对象而写的,也是必须的,与C++,java,C#中的构造方法作用相同,只是这里我们手动设置了,不会有默认的构造方法。
②.实例化对象并初始化并使用:
--创建hero对象,实例化Person
hero = Person:New()
--为对象中的字段赋值
hero.name = 'maliao'
hero.age = 20
hero.address = '魔王城堡'
--调用对象中的字段
print(hero.name)
print(hero.age)
print(hero.address)
--调用对象中方法,调用方法时
hero:Walk()
3.代码分离
面向对象的编程需要实现类与对象的分离,当你定义好一个类后,在你需要对他实例化为对象时,需要引入其所在空间,
就像java是 "import 包",C#是“using 命名空间”,而Lua是引用路径。
关键方法: dofile("路径+脚本名.lua"),如果当前脚本和要加载的脚本处于同一个文件夹中,只需要写脚本名即可,如果说当前脚本和要加载的脚本处于不同的文件夹下,就需要写“路径”
2种路径方式:
1.相对路径:就是相对于当前文件的一个路径位置,“..\\”表示上一级目录
2.绝对路径:就是我们电脑上的绝对地址,如“C:\aaa\bbb\ccc\ddd.lua
--返回上一级目录进入class目录找到Person.lua文件
dofile("..\\class\Person.lua")
--可直接调用Person.lua中公开的字段和方法
myhero = Person:New("wulala", 20, "南京") --增加了新的构造方法,可给初始字段赋值
Person:Walk()