Lua中的类编程代码实例

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

以上是 Lua中的类编程代码实例 的全部内容, 来源链接: utcz.com/z/330301.html

回到顶部