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

做彩票网站空间去哪买网络营销专业培训学校

做彩票网站空间去哪买,网络营销专业培训学校,怎么利用网站做兼职,网站二级域名建站属于子站吗针对在两种正常状态:表的不存在的域的查询和修改,Lua也提供了改变 tables的行为的方法。 index metamethod 我们可以通过index元方法来实现访问table内部不存在的域时人为操控返回数据。 比如以下测试代码: local set {1,2,3} setmetata…

针对在两种正常状态:表的不存在的域的查询和修改,Lua也提供了改变 tables的行为的方法。

index metamethod

我们可以通过index元方法来实现访问table内部不存在的域时人为操控返回数据。

比如以下测试代码:

local set = {1,2,3}
setmetatable(set,{__index = function (t, k)print("index func "..k)end
})
print(set[4]) --index func 4     nilset = {}
print(set[4]) --nil

由上可以看出当我们去访问表内不存在的域时会走一遍__index函数并取得相应返回值。同时我们需要注意的是在后期重新赋值整表的时候其metatable已经刷新,所以再次访问不存在的域时已不存在之前的效果。

__index同样可以是一个table类型而非函数类型,这样的意义即如若访问不存在的域则寻找这个table B,否则则查找这个table B的__index metamethod。

local A = {1,2,3}
local B = {["a"] = 4,["b"] = 5}
setmetatable(B,{__index = function (t,k)print("test B index func")end
})
setmetatable(A,{__index = B
})
print(A["a"]) --4
print(A["b"]) --5
print(A["c"]) --test B index func

因此则可以引出lua的重要概念:继承,通过index函数可以实现没找到原table的域时可以从父类寻找。

如若不想经过index操作则直接调用rawget(t,i)来寻找相应值。

newindex metamethod

__newindex metamethod在对表缺少的域赋值的时候会被调用,注意,调用了__newindex之后并不会自动进行赋值操作,意味着在newindex函数里需要手动赋值才行。参考如下代码:

local A = {1,2,3}
setmetatable(A,{__newindex =function (t, k, v)print("test A newindex func")end
})
A[4] = 4 --test A newindex func
for i = 1,4 doprint(A[i]) -- 1 2 3 nil
end

可以发现赋值了key=4之后的A[4]访问值依然为nil,说明newindex内部仍然需要显式加上t[k] = v才可。

如若不想经过newindex操作则直接调用rawset(t,k,v)来进行表的赋值。

默认值的表

直接重写index函数,如若访问到了不存在的域,则默认返回某值即可,参考如下代码:

local A = {1,2,3}
setmetatable(A,{__index = function (t, k)return 1end
})
for i = 1,4 doprint(A[i]) -- 1 2 3 1
end

当然如果担心每个对象都需要默认值访问逻辑,但是默认值都不同,也可以表内部维护一个local table变量,__index实际上就是调用这个local变量里的某个键值对即可,如下所示:

local A = {1,2,3}
local key = {}
setmetatable(A,{__index = function (t, k)return A[key]end
})A[key] = 1 --如果后续每个对象都需要不同的默认值,则直接修改即可,不用担心冲突
for i = 1,4 doprint(A[i]) -- 1 2 3 1
end

监控表

顾名思义,当我们对某个表进行赋值或者访问操作时,需要进行记录。我们可以创建一个代理表,这个代理表不存储任何数据,修改__index和__newindex函数来输出记录并定位至原表,如下所示:

local A = {1,2,3}
function Record(tb)local proxy = {}setmetatable(proxy,{__index = function (t, k)print("index")return tb[k]end,__newindex = function (t, k, v)print("newindex")tb[k] = vend})return proxy
endlocal proxy = Record(A)
for i = 1,3 doprint(proxy[i])
--[[index1index2index3]]--
end
proxy[4] = 4 --newindex

只不过类似pairs的操作是无效的,因为proxy本身就是空表。

只读表

参考之前的博客:lua只读表-CSDN博客

http://www.ds6.com.cn/news/86151.html

相关文章:

  • 新疆做网站哪家公司好网络营销形式
  • 沭阳做网站shy1z软文写作技巧及范文
  • 武汉品牌网站建设公司百度网盘客服中心电话
  • 同江佳木斯网站设计新网站怎么做推广
  • 网站建设学校培训学校做百度推广怎么做才能有电话
  • 建筑企业登录哪个网站国产搜什么关键词最好看
  • 石家庄做网站的公司百度域名注册官网
  • cakephp网站开发框架网络营销组织的概念
  • 网站切片 做程序时事新闻热点
  • 网站写动态新闻有什么好处seo搜索引擎优化工具
  • 如何把网站推广出武安百度seo
  • 网站收录减少淘宝关键词搜索工具
  • 阿里巴巴建设网站首页小红书seo排名规则
  • 网站地址栏小图标搜索引擎营销的内容和层次有哪些
  • 柳河县建设局网站营销型网站制作公司
  • ppt模板如何制作360优化大师下载安装
  • 佛山专业网站建设哪家好百度指数怎么看
  • 沈阳个人网站制作网络广告四个特征
  • 有没有做网站的联系方式谷歌网页版入口
  • 温州网站建设模板总部推广商
  • sem推广软件哪家好seo交流网
  • 固镇县住房和城乡建设局网站seo在线教学
  • 网站建设的编程技术seo网络营销公司
  • wordpress个人中心打不开上海seo有哪些公司
  • 开发区网站建设工作管理办法seo综合查询怎么进入网站
  • 石家庄网站建设推广公司哪家好百度推广的几种方式
  • 常平网站建设公司海外广告投放公司
  • 临沂网站建设找谁网站在线推广
  • 公司网站建设工作总结全国教育培训机构平台
  • 2016网站谷歌权重百度应用商店下载安装