元表还可以指定关系操作符的含义,元方法为__eq ,__lt(小于) ,__le(小于等于). 而其它3个关系操作符则没有单独的元方法,Lua会 把a ~= b 转化为not(a == b) 将a>b 转化为 b < a ; 将a>=b 转化为 b <= a ; 因此需要分别为__le和__lt提供实现: mt.__le = function(a,b) --set containment for k in pairs(a) do if not b[k] then return…
假设用table来表示集合,用function去计算集合的交集.并集. 为了保持名称空间的整齐,将这些函数存入一个名为Set的table中. 现在,假设用“+”来计算两个集合的并集,那么就要让所有用于表示集合的table共享一个元表. 并且在该元表中定义如何执行一个加法操作. local mt = {} --集合的元表 function Set.new(l) local set = {} setmetatable(set,mt) for _,v in ipairs(l) do set[v] =…
lua中提供的元表(metatable)与元方法(metamethod)是一种非常重要的语法,metatable主要用于做一些类似于C++重载操作符式的功能. lua中提供的元表是用于帮助lua变量完成某些非预定义功能的个性化行为,如两个table的相加,通过让两者指向同一元表并修改该元表的元方法可以实现该功能. 任何table都可以成为任何值的元表,而一组相关的table也可以共享一个元表. 一些MetaMethod: __add(a, b) 对应表达式 a + b __sub(a, b) 对…