当前位置: 首页 > news >正文

网站建设刂搜金手指下拉贰伍icp备案 网站备案

网站建设刂搜金手指下拉贰伍,icp备案 网站备案,html常用标签,珲春市建设局网站是多少示例代码 《programming in lua》里有一个案例很详细,就是写一个集合类的table,其负责筛选出table中不重复的元素并组合成一个新的table。本人按照自己的方式默写了一次,结果发现大差不差,代码如下: Set {} --集合--…

示例代码

 《programming in lua》里有一个案例很详细,就是写一个集合类的table,其负责筛选出table中不重复的元素并组合成一个新的table。本人按照自己的方式默写了一次,结果发现大差不差,代码如下:

Set = {} --集合--创建一个新集合
function Set.new(t)local set = {}for k,v in ipairs(t) doset[v] = trueendreturn set
end--集合并运算
function Set.union(a,b)local res = Set.new({})for k,v in pairs(a) dores[k] = trueendfor k,v in pairs(b) dores[k] = trueendreturn res
end--集合交运算
function Set.intersection(a,b)local res = Set.new({})for k,v in pairs(a) doif b[k] thenres[k] = trueendendreturn res
end--集合转成字符串
function Set.tostring(set)local res = "{"local temp = ""for k,v in pairs(set) dores=res..temp..ktemp = ","endres=res.."}"return res
endlocal set = Set.new({1,3,4,5,6,3,4,5})
local set2 = Set.new({3,5,7})
local intersectSet = Set.intersection(set,set2)
local unionSet = Set.union(set,set2)
print(Set.tostring(intersectSet)) --{3,5}
print(Set.tostring(unionSet)) --{1,3,4,5,6,7}

算术运算metamethod

将上面每个函数都改写成metamethod的形式,相当于是运算符直接重载,而非显式调用函数名,可以达到同样的目的。赋值加法运算和乘法运算如下:

setmetatable(Set,{__add = Set.union,__mul = Set.intersection,
})--创建一个新集合
function Set.new(t)local set = {}setmetatable(set,getmetatable(Set))for k,v in ipairs(t) doset[v] = trueendreturn set
end

关系运算metamethod

常见的关系运算即等于、小于、大于、大于等于、小于等于,只需要等于、小于、小于等于中的其中两个关系,即可推算出其他所有关系。如果是a大于b则是b小于等于a的运算;如果是a大于等于b则是b小于a的运算。在lua中给了三个关系运算metamethods:__eq(等于),__lt(小于),和__le(小于 等于)给关系运算符赋予特殊的含义。

于是为上面集合覆写关系运算:

--小于等于
__le = function(a,b)for k,v in pairs(a) doif not b[k] thenreturn falseendendreturn true
end,
--等于
__eq = function(a,b)return a <= b and b <= a
end,
--小于
__lt = function(a,b)return a <= b and a ~= b
end

测试代码如下:

local a = Set.new({1,3,4,5,6})
local b = Set.new({3,5})
print(a==b)--false
print(a<=b)--false
print(a>=b)--true
print(a<b)--false
print(a>b)--true

tostring

类似tostring函数也是有相应的metamethod供我们选择的,比如上方的tostring函数,可以设置metatable的元方法__tostring,这样的话就直接print(set)即可了:

setmetatable(Set,{__add = Set.union,__mul = Set.intersection,__tostring = Set.tostring
})
print(intersectSet) --{3,5}
print(unionSet) --{1,3,4,5,6,7}
http://www.yayakq.cn/news/944669/

相关文章:

  • 专业网站开发培训注册一家公司
  • 外包网站建设哪家好wordpress字体编辑器
  • wordpress网站安全性做网站的财务会涉及到的科目
  • 上海建设企业网站WordPress网络功能
  • 营销型企业网站系统模板下载uv推广平台
  • 东莞购物网站建设国外做海报的网站
  • 阿里云企业网站备案流程怎么做网站链接
  • 烟台小学网站建设浙江融兴建设有限公司网站
  • 网站被泛解析设计漂亮的网站
  • php英文网站源码南京网站建设公司 ww
  • 盐城网站建设优化建站做自动化设备哪个网站
  • 郑州市建设投资集团公司网站seo快速软件
  • 安微凤阳县建设局网站建设网站iss
  • seo 网站排名乐清seo公司推荐
  • 学编程后悔死了小红书seo关键词优化多少钱
  • 设计网站架构个人做淘宝客网站有哪些
  • 海珠高端网站建设化工网站模板下载
  • 嘉定网站设计制作报价app开发网站模板
  • 重庆网站建设重庆网站制作百度的seo关键词优化怎么弄
  • 电商app制作费用一览表广告优化师工作内容
  • 农家乐网站规划与建设方案2022年全球3月解封
  • 雅客网站建设网站做中英版
  • 相亲网站做期货现货贵金属的人哈尔滨网站免费制作
  • 金华做网站公司百度联盟推广
  • 下载别人做的ppt的网站三字顺口名字公司
  • 网站设计需求方案柳州做网站seo哪家好
  • 咸宁有做网站的吗wordpress生成了太多图片
  • 四川城乡建设部网站首页学校 html5 网站 案例
  • opkg 做网站的包叫什么名字定制网站开发哪家强
  • 山东省青州市建设局网站wordpress搜索函数