Lua初学者笔记

using "UnityEngine"
Set={}
local mt={}  --集合的元表
 --根据参数列表中的值创建一个新的集合
function Set.new(l)--在Set表中定义一个方法new
    local set ={}--定义一个表
        setmetatable(set,mt)--将mt 设置成set 的元表
    for _,v in pairs(l) do--用 _, v这种方式是为了在迭代表 l 之时取v的值而忽略键k
        set[v]=true
    end 
end
--并集操作
function Det.union(a,b)
    local retSet = Set.new{}--此处相当于Set.new({})
    for v in pairs(a) do retSet[v]=true end
    for v in pairs(b) do retSet[v]=true end
    return retSet
end
--交集操作
function Set.intersection(a,b)
    local retSet = Set.new{}
    for v in pairs(a) do retSet[v]=b[v] end 
    return retSet
end

--打印集合的操作
function Set.toString(set)
    local tb = {}
    for e in pairs(set) do
        tb[#tb+1]=e
    end
    return "{"..table.concat(tb,",").."}"--列出参数中指定table的数组部分从start位置到end位置的所有元素
end

function Set.print( s )
    print(Set.toString(s))
    Debug.Log(Set.toString(s))
end

collectgarbage() --强制进行一次垃圾收集

Set={}
local mt={}--集合元表  
--根据参数列表中的值创建新集合
function Set,new( l )
    local set = {}
    setmetatable(set,mt)
    for _,v in pairs(l) do set[v]=true end 
    return set
end


local set1 = Set.new({10,20,30})
local set2=Set.new({1,2})
print(getmetatable(set1))
print(getmetatable(set2))
assert(getmetatable(set1)==getmetatable(set2))--assert(断言)可以将其理解为是异常处理的一种高级形式

mt.__add = Set.union

local set1 = Set.new({10, 20, 30})
local set2 = Set.new({1, 2})
local set3 = set1 + set2
Set.print(set3)
--__newindex元方法与__index类似,__newindex用于更新table中的数据,而__index用于查询table中的数据


Windows = {} -- 创建一个命名空间

-- 创建默认值表
Windows.default = {x = 0, y = 0, width = 100, height = 100, color = {r = 255, g = 255, b = 255}}

Windows.mt = {} -- 创建元表

-- 声明构造函数
function Windows.new(o)
     setmetatable(o, Windows.mt)
     return o
end

-- 定义__index元方法
Windows.mt.__index = function (table, key)
     return Windows.default[key]
end

local win = Windows.new({x = 10, y = 10})
print(win.x)               -- >10 访问自身已经拥有的值
print(win.width)          -- >100 访问default表中的值
print(win.color.r)          -- >255 访问default表中的值
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值