metatable 保护protected

设置元表后,填充__metatable字段,元表就无法被访问,依然可以被调用。

Set.mt = {}

Set.mt.__add = Set.union

function Set.new(t)

local set = {}

setmetatable(set,Set.mt)

for _,l in ipairs(t) do

set[l] = true

end

return set

end

Set.mt.__metatable = "not your businesss"

s1 = Set.new{}

print(getmetatable(s1))   -- 显示 not your business

setmetatable(s1,{})   -- cannot change a protected metatable

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1.1程序块:Lua执行的每段代码,例如一个源代码文件或者交互模式中输入的一行代码,都称为一个程序块 1.2注释:...
    c_xiaoqiang阅读 2,639评论 0 9
  • Lua 全教程 本文目录 Lua 简介 Lua 版本 Lua 环境开发工具软件包管理分析和调试 基础概念常量和标识...
    Hello_Muay阅读 5,523评论 0 2
  • Lua 5.1 参考手册 by Roberto Ierusalimschy, Luiz Henrique de F...
    苏黎九歌阅读 13,949评论 0 38
  • lua基础数据类型 nil 一个变量在第一次赋值前的默认值是 nil, 将nil 赋予给一个全局变量就等同于删除它...
    毛球小二阅读 2,071评论 0 6
  • 渐变的面目拼图要我怎么拼? 我是疲乏了还是投降了? 不是不允许自己坠落, 我没有滴水不进的保护膜。 就是害怕变得面...
    闷热当乘凉阅读 4,350评论 0 13