30. Lua 关系类的元方法

  • __eq() 等于
  • __lt() 小于
  • __le() 包含
mt = {}
mt.__le = function( a , b ) -- 集合包含 a<=b
    for k in pairs(a) do
        if not b[k] then
            return false
        end
    end
    return true
end

mt.__lt = function(a , b )  -- a<b
    return a <= b and not(b<=a)
end

mt.__eq = function( a , b )
    return a<=b and b<=a
end

mt.__tostring = function( set )
    local l = {} -- 用于存放集合中所有元素的列表
    for e in pairs(set) do
        l[#l + 1 ] = set[e]
    end
    return "{" .. table.concat( l , ",") .. "}"
end

mt.__metatable = "not your business"

s1 = { 2 , 4 }
s2 = { 4 , 10 , 2 }
setmetatable( s1 , mt )
setmetatable( s2 , mt )
print( s1 <= s2 )  --> true
print( s1 < s2 )  --> true
print( s2 < s1 )  --> false
print( s2 == s1 )  --> false
print( s1 == s1 )  --> true
print( s1 )  --> {2,4}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

友情链接更多精彩内容