lua的简单对象实现以及简单继承

来源:互联网 发布:软件融合器 编辑:程序博客网 时间:2024/05/29 13:14

定义一个函数,返回值是一个对象。 这个就像显示定义一个构造函数一样,只不过最后要return一个对象。

在函数里面定义对象的变量名和函数。 

注意: 在创建函数内部使用  self加引号来表示对象的函数(self:getName())

           使用self加点来使用对象的变量。(self.name)


成员方法的定义

function obj:method(a1, a2, ...) … end 等价于

function obj.method(self, a1, a2, ...) … end等价于

obj.method = function (self, a1, a2, ...) … end

成员方法的调用

obj:method(a1, a2, …) 等价于

obj.method(obj, a1, a2, ...)



使用方法不对会报一下错误。翻译一下就是,尝试索引self的一个字符串变量,但是返回在查找不到的信息。

lua: object.lua:4: attempt to index local 'self' (a string value)

stack traceback:

object.lua:4: in function 'SetName'

object.lua:24: in main chunk

[C]: in ?



function create(name, id)    local obj = {name = name, id =id }    function obj:SetName(name)        self.name = name    end    function obj:SetId(id)       self.id = id    end    function obj:getName()       return self.name    end    function obj:getId()       return self.id    end    function obj.getInfo(self)       return self.id + 234    end    return objendo1 = create("Sam", 001)o2 = create("Ben", 999)o2:SetName("Bunny")print("获取所有信息",o2.getInfo(o2))print("名字:", o2.name, " ", o2.id)


顺便看了一下简单的继承。

lua的这种方式对于C++程序员或许会感到有点不可思议,但是就单纯的使用方式来看,简单而功能强大。

lua的继承就是在对象里面使用如上的基函数创建一个基对象,然后来完善这个基对象再进行返回,就变成了一个继承的对象。

(lua没有基函数基对象这个说法吧,个人理解的,对C++程序员或许容易理解些)

function createRobot(name, id)    local obj = { name = name, id = id }    function obj:SetName(name)        self.name = name    end    function obj:GetName()        return self.name    end    function obj:GetId()       return self.id    end    return objendfunction createFootballRobot(name,id, position)    local obj = createRobot(name, id)    obj.position = "right back"    function obj:SetPosition(p)       self.position = p    end    function obj:GetPosition()       return self.position    end    return objend


0 0
原创粉丝点击