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

lua只读表

参考《programming in lua》13.4.5中,详细介绍了只读表的用法。建立一个函数,传入一个table,传出一个代理table,其__index指向传入的table,__newIndex直接报error即可:

--输入一个table,输出一个代理table,其只读
function table.readOnly(tbTarget)local proxy = {}setmetatable(proxy,{__index = tbTarget,__newindex = function(t,k,v)error("attempt to update a read-only table", 2)end})return proxy
endA = {}
A[1] = 1B = table.readOnly(A)
print(B[1]) --print:1
B[2] = 2 --print:attempt to update a read-only table
B[1] = "a" --print:attempt to update a read-only tableA[1] = 2
print(B[1]) --print:2
A[2] = 3
print(B[2]) --print:3

其中有两个重要的点:

1.index重新定位至原table,但proxy本身是空表,newIndex无论是什么key都会报error,不管原table内部是否有这个key。

2.__index实际是地址形式,如若中途修改了原table内部的值,proxy代理table也会相应改变和定位。

相关文章:

  • Security ❀ TCP异常报文详解
  • 【JavaEE进阶】 图书管理系统开发日记——肆
  • git的分支的使用,创建分支,合并分支,删除分支,合并冲突,分支管理策略,bug分支,强制删除分支
  • 字面跳动前端面试题:React Hook为什么不能放在if/循环/嵌套函数里面?
  • js数组和字符串之间的转换方式以及数组的一些方法
  • 51单片机实验课二
  • 二、人工智能之提示工程(Prompt Engineering)
  • JAVA中枚举的方法
  • Java基础 集合(二)List详解
  • 【CSS + ElementUI】更改 el-carousel 指示器样式且隐藏左右箭头
  • Qt应用软件【数据篇】大小端数据转换
  • Linux进程信号处理:深入理解与应用(2​​)
  • 【Tomcat与网络6】 Tomcat是如何扩展Java线程池的?
  • Python flask 模板详解
  • 物流平台架构设计与实践
  • 【Leetcode】101. 对称二叉树
  • log4j2输出到kafka
  • mongodb--安装和初步使用教程
  • PHP 使用 Swoole - TaskWorker 实现异步操作 Mysql
  • Python学习笔记 字符串拼接
  • 产品三维模型在线预览
  • 创建一种深思熟虑的文化
  • 搭建gitbook 和 访问权限认证
  • 工程优化暨babel升级小记
  • 关于使用markdown的方法(引自CSDN教程)
  • 将 Measurements 和 Units 应用到物理学
  • 力扣(LeetCode)965
  • 如何正确配置 Ubuntu 14.04 服务器?
  • 微信小程序设置上一页数据
  • 栈实现走出迷宫(C++)
  • Python 之网络式编程
  • ​​​​​​​sokit v1.3抓手机应用socket数据包: Socket是传输控制层协议,WebSocket是应用层协议。
  • ​linux启动进程的方式
  • ​学习一下,什么是预包装食品?​
  • #162 (Div. 2)
  • #include
  • #Linux(Source Insight安装及工程建立)
  • #LLM入门|Prompt#1.8_聊天机器人_Chatbot
  • $.ajax()参数及用法
  • (1)(1.19) TeraRanger One/EVO测距仪
  • (env: Windows,mp,1.06.2308310; lib: 3.2.4) uniapp微信小程序
  • (javascript)再说document.body.scrollTop的使用问题
  • (Mirage系列之二)VMware Horizon Mirage的经典用户用例及真实案例分析
  • (NO.00004)iOS实现打砖块游戏(十二):伸缩自如,我是如意金箍棒(上)!
  • (react踩过的坑)Antd Select(设置了labelInValue)在FormItem中initialValue的问题
  • (附源码)计算机毕业设计SSM智能化管理的仓库管理
  • (含react-draggable库以及相关BUG如何解决)固定在左上方某盒子内(如按钮)添加可拖动功能,使用react hook语法实现
  • (四)Android布局类型(线性布局LinearLayout)
  • (学习日记)2024.04.04:UCOSIII第三十二节:计数信号量实验
  • (一)kafka实战——kafka源码编译启动
  • (一)u-boot-nand.bin的下载
  • (原創) 如何刪除Windows Live Writer留在本機的文章? (Web) (Windows Live Writer)
  • (转) RFS+AutoItLibrary测试web对话框
  • (转)AS3正则:元子符,元序列,标志,数量表达符
  • (转)jQuery 基础