• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    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]: ?
    

     

    您可能感兴趣的文章:
    • Lua编程示例(一):select、debug、可变参数、table操作、error
    上一篇:Lua编程示例(一):select、debug、可变参数、table操作、error
    下一篇:Lua编程示例(三):稀疏表、双端队列、格式化输出、表和循环表的格式化输出
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

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