A5下载 - 努力做内容最丰富最安全的下载站!

A5站长下载站

当前位置:A5下载 > 源码技巧 > 父类数据 > Lua编程示例(二):面向对象、metatable对表进行扩展

Lua编程示例(二):面向对象、metatable对表进行扩展

时间:2015-07-09 15:23作者:zhao人气:39

counter = {

count = 0

}

function counter.get(self)

return self.count

end

function counter:inc()

self.count=self.count+1

end

print(counter.get(counter))

counter.inc(counter)

print(counter.get(counter))

counter2={

count=4,

get = counter.get,

inc = counter.inc,

}

print(counter2:get())

counter.inc(counter2)

print(counter2.get(counter2))

print()

tb1 ={ "alpha","beta","gamma"}

mt={}

setmetatable(tb1,mt)

print(getmetatable(tb1) == mt)

print()

function mt.__add(a,b)

local result = setmetatable({},mt)

for i=1,#a do

table.insert(result,a[i])

end

for i=1,#b do

table.insert(result,b[i])

end

return result

end

tb2={"aaa","bbb","ccc"}

res=tb1+tb2

for i,v in ipairs(res) do

print(v)

end

print()

function mt.__unm(a)

local result = setmetatable({},mt)

for i=#a , 1 ,-1 do

table.insert(result,a[i])

end

return result

end

res=-tb1+tb2

for i,v in ipairs(res) do

print(v)

end

print()

function mt.__tostring(a)

local result = "{"

for i,v in ipairs(a) do

result = result.." "..v

end

result = result.." } "

return result

end

print(tb1)

function mt.__index(tb1,key)

print("there is no "..key.." in the table")

return nil

end

print(tb1["fsy"])

function mt.__newindex(a,key,v)

if( key == "haha") then

error(" Stop laugh!",2)

else

rawset(a,key,v)

end

end

tb1.haha="heihei"

运行结果:

0

1

4

5

true

alpha

beta

gamma

aaa

bbb

ccc

gamma

beta

alpha

aaa

bbb

ccc

{ alpha beta gamma }

there is no fsy in the table

nil

lua: my_test.lua:166: Stop laugh!

stack traceback:

[C]: in function 'error'

my_test.lua:160: in function <my_test.lua:158>

my_test.lua:166: in main chunk

[C]: ?

标签Lua,编程,示例,面向,对象,metatable,进行,扩

相关下载

查看所有评论+

网友评论

网友
您的评论需要经过审核才能显示

公众号