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

相关推荐

  1. lua

    2024-02-05 08:20:03       49 阅读
  2. c# 让文件

    2024-02-05 08:20:03       54 阅读
  3. Lua weak

    2024-02-05 08:20:03       50 阅读
  4. 13、Lua table()

    2024-02-05 08:20:03       39 阅读
  5. Lua Table(

    2024-02-05 08:20:03       26 阅读
  6. Lua 如何写ini文件

    2024-02-05 08:20:03       40 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-02-05 08:20:03       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-02-05 08:20:03       100 阅读
  3. 在Django里面运行非项目文件

    2024-02-05 08:20:03       82 阅读
  4. Python语言-面向对象

    2024-02-05 08:20:03       91 阅读

热门阅读

  1. 作业..........

    2024-02-05 08:20:03       55 阅读
  2. python25-Python的运算符之索引运算符

    2024-02-05 08:20:03       58 阅读
  3. Axure详细介绍

    2024-02-05 08:20:03       58 阅读
  4. 802.11 MAC帧介绍

    2024-02-05 08:20:03       46 阅读
  5. iPhone搞机记录

    2024-02-05 08:20:03       48 阅读
  6. 计算机网络——02网络边缘

    2024-02-05 08:20:03       52 阅读
  7. 【Django-ninja】在django ninja中处理异常

    2024-02-05 08:20:03       40 阅读
  8. aspose-words在linux上安装字体

    2024-02-05 08:20:03       48 阅读
  9. 3031. Minimum Time to Revert Word to Initial State II

    2024-02-05 08:20:03       54 阅读