lua只读表

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

Lua 复制代码
--输入一个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
end

A = {}
A[1] = 1

B = 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 table

A[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也会相应改变和定位。

相关推荐
前进的李工11 分钟前
数据库视图:数据安全与权限管理利器
开发语言·数据库·mysql·navicat
C_心欲无痕12 分钟前
使用 XLSX.js 导出 Excel 文件
开发语言·javascript·excel
sycmancia37 分钟前
C++——多态
开发语言·c++
t198751281 小时前
基于多尺度特征融合与自适应权重优化的水下图像对比度与边缘增强MATLAB方法
开发语言·matlab
chilavert3181 小时前
程序员面试经典问题解答:java篇-2
开发语言·python
senijusene1 小时前
TCP并发服务器:poll和epoll的多路复用
开发语言·php
浅碎时光8072 小时前
Qt (按钮/显示/输入/容器类控件 布局管理器)
开发语言·qt
bubiyoushang8882 小时前
OFDM系统信道估计MATLAB实现(LS、MMSE、DCT、LRMMSE方法)
开发语言·网络·matlab
Felven2 小时前
C. Dora and Search
c语言·开发语言
John Song4 小时前
Python创建虚拟环境的方式对比与区别?
开发语言·python