Lua 元表
2015-10-30 11:10
281 查看
1. lua元表
元表概念:
引言:Lua中的每个值都有一套预定义的操作集合,如数字相加等。但无法将两个table相加,此时可通过元表修改一个值的行为,使其在面对一个非预定义的操作时执行一个指定操作。
访问机制:例如两个table相加:
1.先检查两者之一是否有元表
2.检查是否有一个叫**__add**的字段,
3.若找到,则调用对应的元方法。
__add等即时字段,其对应的值(往往是一个函数或是table)就是“元方法”。
2. lua实例
local Set = {} local mt = {} function Set.new( l ) local set = {} setmetatable(set, mt) for _, v in ipairs( l ) do set[v] = true end return set end function Set.union( a, b ) local res = Set.new{} for k in pairs(a) do res[k] = true end for k in pairs(b) do res[k] = true end return res end function Set.intersection( a, b ) local res = Set.new{} for k in pairs(a) do res[k] = b[k] end return res end function Set.tostring( set ) local l = {} for e in pairs(set) do l[#l + 1] = e end return "{" .. table.concat( l, ", ") .. "}" end function Set.print(s) print(Set.tostring(s)) end mt.__add = Set.union s1 = Set.new{10, 20, 30, 50} s2 = Set.new{30, 1} s3 = s1 + s2 Set.print(s3) print(#s3) print(getmetatable(s1)) print(getmetatable(s2))
相关文章推荐
- Ngx_lua 最佳技术实践 | UPYUN技术现场
- Lua(一)
- C言扩展lua模块(入门)
- coocs2dx3.2 绑定自定义C++类到lua
- lua垃圾回收机制
- 用C语言扩展lua模块(入门)
- lua字符串分割
- Lua协程
- Lua语言实现简单的多线程模型
- 当mac升级到EI Caption后绑定到Js、lua出现LibclangError: dlopen(libclang.dylib, 6)的错误
- Lua视频教程连载(第一课)
- lua State加载部分库
- Lua 迭代器
- Lua 变长参数(variable number of arguments)
- Deploy openresty + lua + zabbix
- 使用ngx_lua发送文件给服务器
- robot framework万能的evaluate
- Lua
- lua文件读写
- Lua中的操作系统库