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

乌鲁木齐做公司网站推广图片大全

乌鲁木齐做公司网站,推广图片大全,南昌专业网站设计,做中文网站的公司Lua 绕过元表,直接访问 table 的字段。 绕过元表 rawset(table, index, value),在不触发元方法的情况下,设置 table[index] 的值为 value。 rawget(table, index),在不触发元方法的情况下,获取 table[index] 的值。…

Lua 绕过元表,直接访问 table 的字段。

绕过元表

rawset(table, index, value),在不触发元方法的情况下,设置 table[index] 的值为 value。

rawget(table, index),在不触发元方法的情况下,获取 table[index] 的值。

现有一个 hero 表,设置了元表和元方法。

local hero = {level = 1,exp = 0
}local mt = {__index = function (table, key)print("trigger __index")end,__newindex = function (table, key, value)print("trigger __newindex")end
}
setmetatable(hero, mt)

如果去访问一个不存在的 key,则会进入元表的元方法。

因为 __newindex 被赋值为一个函数,只有打印,没有把值存到 table 里,所以 hero 里还是没有 star 字段。

hero.star = 5
print(hero.star)-- trigger __newindex
-- trigger __index
-- nil

现在使用 rawset 为 hero 添加一个新字段 star,再使用 rawget 从 hero 中获取 star 字段。

可以发现,没有触发元方法的打印,hero 表中也添加了 star 字段。

rawset(hero, "star", 5)
local star = rawget(hero, "star")
print(star)-- 5

防止死循环

修改一下元方法,在 __index 中返回 table[key] 的值,在 __newindex 中设置 table[key] 为 value。

local hero = {level = 1,exp = 0
}local mt = {__index = function (table, key)print("trigger __index")return table[key]end,__newindex = function (table, key, value)print("trigger __newindex")table[key] = valueend
}
setmetatable(hero, mt)

看上去似乎没有什么问题,但是如果触发了这两个元方法,它们内部的逻辑(也就是 table[key])又会触发元方法,进入死循环,最后栈溢出。

hero.star = 5-- trigger __newindex
-- trigger __newindex
-- trigger __newindex
-- ...
-- C stack overflowprint(hero.star)-- trigger __index
-- trigger __index
-- trigger __index
-- ...
-- C stack overflow

要防止这种死循环,可以利用 rawset 和 rawget,避免再次触发元方法。

local hero = {level = 1,exp = 0
}local mt = {__index = function (table, key)print("trigger __index")return rawget(table, key)end,__newindex = function (table, key, value)print("trigger __newindex")rawset(table, key, value)end
}
setmetatable(hero, mt)

再次访问 star 字段,就不会栈溢出了。

hero.star = 5
-- trigger __newindexprint(hero.star)
-- 5
http://www.tj-hxxt.cn/news/117564.html

相关文章:

  • 电子商务网站建设内容网络seo外包
  • 自已建网站快速网站轻松排名
  • 做平台网站要增值业务吗上海百度推广客服电话
  • 罗湖商城网站设计价格关键词首页排名代发
  • 网站统计模板windows优化大师靠谱吗
  • 网站建设的重要性意义与价值百度新闻搜索
  • 微信公众平台小程序管理在哪里seo网站优化价格
  • 用tp5做网站苏州关键词优化seo
  • 网站开发熬夜么搜索引擎营销的内容
  • 宜阳网站建设随州网络推广
  • 金坛网站建设价格百度搜索链接入口
  • 设计类网站开发策划书免费企业网站建设流程
  • 南昌做网站开发的公司优化网站打开速度
  • 做外贸的网站谷歌排名
  • 武汉做网站做得好的设计工作室怎么在网上推销产品
  • 好的做网站的公司活动软文怎么写
  • 百度云做网站临沂网站建设方案服务
  • 旅游网站制作模板网络营销的特征
  • 成都快型网络公司排名关键词seo优化软件
  • 中国建设企业协会网站首页搜索优化师
  • 小内存安装wordpressaso优化报价
  • vue做的网站影响收录么普通话手抄报文字内容
  • 辽宁省朝阳市做网站抖音seo排名优化
  • 企业网站建设的过程seo管理系统培训运营
  • 关于网站建设的好处上往建站
  • 网站编程好学吗网络营销网站平台有哪些
  • 手机网站代码下载关键词搜索指数
  • 大型网站设计首页实例外链怎么做
  • 直接做的黄页视频网站长沙网站推广公司排名
  • 广西网红排名前20名seo服务外包