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

lua中rawget和rawset

当我们只想单纯的调用table里的字段或者给table字段赋值时,
通过rawget函数来忽略元表的__index作用,
通过rawset函数来忽略元表的__newindex作用

举例:

local father = 
{
    sayHello = function()
    	print("大家好,我是father.");
    end
}
    
local temp =
{
    __index = father,
    __newindex = function(table, key)
        print(key .. "字段是不存在的,不允许给它赋值!");
    end
}
    
son = 
{
	car=1
}
setmetatable(son, temp) --把son的metatable设置为father
print(rawget(son, "house")); //输出nil,因为是rawget,并且son中无house属性
print(rawget(son, "car"));	//输出1,因为是rawget,但是son有car属性
rawset(son, "house", "10"); //son无house属性,然后并且是rawset,所以忽略元表中的__newindex方法,所以此时son中被设置了一个house属性
rawset(son, "sayHello", function() //son无方法sayHello,然后并且是rawset,所以忽略元表中的_newindex方法,所以song多了一个sayHello方法
            print('============')
        end);

print(son.house);
son.sayHello()

输出:
在这里插入图片描述

相关文章:

  • Linux红黑树(二)——访问节点
  • lua中继承
  • SPOJ REPEATS Repeats (后缀数组:子串的最大循环节)题解
  • lua在什么时候设置元表失败呢
  • lua中通过__index继承父类的属性
  • C++中匿名函数的捕获列表和匿名函数的说明
  • lua中通过__index继承父类的方法
  • lua中函数闭包
  • Entity Framework加载相关实体——Lazy Loading
  • C++函数对象包装器std::function
  • cygwin 安装
  • shell 1
  • C#中FileStream——循环RingBuffer
  • 二分查找算法(折半查找算法)
  • C#中的lock和Monitor.Enter和Monitor.Exit
  • 〔开发系列〕一次关于小程序开发的深度总结
  • 2017届校招提前批面试回顾
  • ECS应用管理最佳实践
  • iOS仿今日头条、壁纸应用、筛选分类、三方微博、颜色填充等源码
  • java正则表式的使用
  • jquery ajax学习笔记
  • jquery cookie
  • mac修复ab及siege安装
  • Netty 4.1 源代码学习:线程模型
  • use Google search engine
  • win10下安装mysql5.7
  • 动手做个聊天室,前端工程师百无聊赖的人生
  • 近期前端发展计划
  • 经典排序算法及其 Java 实现
  • 警报:线上事故之CountDownLatch的威力
  • 排序(1):冒泡排序
  • 数组的操作
  • 温故知新之javascript面向对象
  • 学习ES6 变量的解构赋值
  • 1.Ext JS 建立web开发工程
  • 2017年360最后一道编程题
  • gunicorn工作原理
  • kubernetes资源对象--ingress
  • #每天一道面试题# 什么是MySQL的回表查询
  • (带教程)商业版SEO关键词按天计费系统:关键词排名优化、代理服务、手机自适应及搭建教程
  • (算法)Game
  • (算法二)滑动窗口
  • (原創) 如何解决make kernel时『clock skew detected』的warning? (OS) (Linux)
  • (转)es进行聚合操作时提示Fielddata is disabled on text fields by default
  • ***原理与防范
  • *2 echo、printf、mkdir命令的应用
  • .net 生成二级域名
  • .Net8 Blazor 尝鲜
  • .net反编译工具
  • .net通用权限框架B/S (三)--MODEL层(2)
  • /dev下添加设备节点的方法步骤(通过device_create)
  • @Autowired和@Resource的区别
  • @autowired注解作用_Spring Boot进阶教程——注解大全(建议收藏!)
  • @EnableAsync和@Async开始异步任务支持
  • @vue/cli 3.x+引入jQuery