Lua的类 和继承

本文介绍Lua语言中面向对象编程的基本概念和技术实现,包括类的定义、实例化过程、方法调用及继承等特性,并通过具体代码示例进行说明。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

lua的类有点像javascript,但是更简明灵活,table即对象,对象就是类。Metatables比起ruby里的MetaClass更加好用,缺点是实例化和继承的代码有点多,

不像ruby里的“<”和“<<”,继承链就是查找方法时的方法链。 

Account={
   test1=function(a) print("Account test1") end
}

Account.test2=function(a) print("Account test2") end

function Account.test3(a) print("Account test3") end


function Account:new (o)  --类的实例化

    o = o or {}

    setmetatable(o, self)

    self.__index = self

    return o

end

function Account.print0(o,a)
    print(a)
end

function Account:print1(a)
    print(a)
end


--方法定义测试
Account.test1()
Account.test2()
Account.test3()

--类测试
acc=Account:new()
acc.test1()
acc.print0(acc,"dot print0")
acc:print0("not dot print0")
acc.print1(acc,"dot print1")
acc:print1("not dot print1")

acc.specialMethod=function(specialMethodTest)
   print(specialMethodTest)
end

acc.specialMethod("smt test")

--继承测试
SpecialAccount = Account:new()
s = SpecialAccount:new{limit=1000.00}

--多重继承测试
Named = {}

function Named:getname ()

    return self.name

end

function Named:setname (n)

    self.name = n

end

local function search (k, plist)

    for i=1, table.getn(plist) do

       local v = plist[i][k]

       if v then return v end

    end

end

function createClass (...)

    local c = {}      -- new class

    setmetatable(c, {__index = function (t, k)

    return search(k, arg)

end})

c.__index = c

function c:new (o)

    o = o or {}

    setmetatable(o, c)

    return o

end

    return c

end
NamedAccount = createClass(Account, Named)

account = NamedAccount:new{name = "Paul"}

print(account:getname())


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值