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

定义一个函数,返回值是一个对象。 这个就像显示定义一个构造函数一样,只不过最后要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 obj
end

o1 = 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 obj
end

function 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 obj
end


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值