Lua语言学习(四)Lua的面向对象

       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()


                 

猜你喜欢

转载自blog.csdn.net/qq_37873310/article/details/80438407
今日推荐