Lua编程示例(二):面向对象、metatable对表进行扩展
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]: ?
相关推荐
峰哥 2020-09-23
陈云佳 2020-08-15
wqiaofujiang 2020-07-05
wordmhg 2020-06-26
wqiaofujiang 2020-06-16
zllbirdonland 2020-06-16
eroshn 2020-06-10
长安长夜Saint 2020-06-07
Dawnworld 2020-06-07
fansenjun 2020-03-01
CSDNMrWang 2020-05-11
Dawnworld 2020-05-05
陈云佳 2020-04-21
Neptune 2020-04-20
shunelly 2020-04-16
aolishuai 2020-04-15
YukiRain 2020-04-14
陈云佳 2020-03-07
陈云佳 2020-03-05