zoukankan      html  css  js  c++  java
  • lua元表(简单例子)

    Set = {}
    Set.mt = {}--定义普通的表作为元表,为了避免命名污染直接放在Set内部
    function Set.new(t)
        local set = {}
        setmetatable(set, Set.mt)--一组相关的表共享一个metatable(通过这个可以描述他们共同的行为),一个表也可以是自身的metatable(描述私有行为)
        for _, l in ipairs(t) do set[l] = 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 s = "{"
        local sep = ""
        for e in pairs(set) do
            s = s .. sep ..e
            sep = ", "
        end
        return s .. "}"
    end
    
    function Set.print(s)
        print(Set.tostring(s))
    end
    --创建的表有相同的元表
    s1 = Set.new{10, 20, 30, 50}
    s2 = Set.new{30, 1}
    print(getmetatable(s1))
    print(getmetatable(s2))
    Set.mt.__add = Set.union--给元表设置__add函数
    --当Lua试图对两个表进行相加时,会检查两个表是否有一个表有metatable,并且检查metatable是否有__add域,如果有直接调用元方法计算
    s3 = s1 + s2
    Set.print(s3)
    Set.mt.__mul = Set.intersection
    Set.print((s1 + s2)*s1)
  • 相关阅读:
    NS3笔录
    网络性能指标的几个定义
    获取Emum类型值的数量
    Container类型元素累加
    ax用代码调用静态查询
    FormRun类的方法detach()作用
    Num2Str函数使用介绍
    查询生产单PO的位置
    AX使用临时表作为数据源
    Date2Str函数使用介绍
  • 原文地址:https://www.cnblogs.com/zzyoucan/p/4323746.html
Copyright © 2011-2022 走看看