Lua: Metatable
运算符重载:
__add:
tbl = setmetatable({ 1, 2, 33 }, { __add = function(tbl, v) -- tbl 的长度不断变化, table.insert的pos参数不能使用#tbl+1, 越界会产生 position out of bounds if type(v) == 'table' then local length = #tbl for i = 1, #v do table.insert(tbl, length + i, v[i]) end else table.insert(tbl, v) end return tbl end }) jot = tbl + { 4, 55, 66 } print(table.concat(jot, ', ')) vane = tbl + 5 -- vane & jot 指向同一地址空间 print(table.concat(vane, ', '))
__call:
tbl = setmetatable({ 5 }, { __call = function(tbl, v) local sum = 0 for b = 1, #tbl do sum = sum + tbl[b] end if type(v) == 'table' then for b = 1, #v do sum = sum + v[b] end else sum = sum + v end return sum end }) print(tbl({ 6, 7 })) print(tbl(6))
__tostring:
tbl = setmetatable({ 10, 20, 30 }, { __tostring = function(tbl) local str = '' for k, v in ipairs(tbl) do str = str .. string.format('[%d] = %s, ', k, v) end return string.gsub(str, ',%s*$', '') end }) print(tbl)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律
2020-05-29 Linux系统登陆过程
2020-05-29 DNS & BIND
2020-05-29 利用openssl建立私有CA
2020-05-29 bash的[ ] [[ ]]