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

【ai写代码】lua-判断表是否被修改

故事背景,我们为了我减轻数据库压力,做了一个内存数据,为了减少保存的量,需要做只保存有修改的字段,因为我们是lua语言。我们不想自己写修改标记,想系统自动判断表是否有被修改。
直接ai写的一个,看例子是可以用,实际要用了才知道。

local function createMonitoredTable(originalTable)-- 独立存储代理状态(不污染原表)local monitor = {modified = false,proxies = {} -- 缓存已代理的表,避免循环引用}-- 递归创建代理local function createProxy(t)-- 如果已经代理过,直接返回if monitor.proxies[t] thenreturn monitor.proxies[t]end-- 创建代理表local proxy = {}monitor.proxies[t] = proxy -- 缓存代理-- 设置代理的元表setmetatable(proxy, {__index = t,__newindex = function(_, k, v)-- 如果新值是 table,递归代理它if type(v) == "table" thenv = createProxy(v)end-- 标记修改monitor.modified = truet[k] = v -- 修改原表(代理只是监听,实际数据仍在原表)end})return proxyend-- 创建顶层代理local proxy = createProxy(originalTable)return {-- 获取代理表(推荐所有操作都通过它)getProxy = function() return proxy end,-- 检查是否被修改isModified = function() return monitor.modified end,-- 重置修改标记resetModified = function() monitor.modified = false end,-- 获取原始表(直接修改可能绕过检测,慎用!)getOriginal = function() return originalTable end}
endlocal original = { a = 1, b = { x = 10 } }
local monitored = createMonitoredTable(original)
local proxy = monitored.getProxy()-- 方式1:通过代理修改(会被检测)
proxy.c = 3
proxy.b.y = 20
print(monitored.isModified()) --> truemonitored.resetModified()-- 方式2:直接修改原表(也会被检测,因为子表已被代理)
original.d = 4
original.b.z = 30
print(monitored.isModified()) --> true-- 查看最终数据
print(original.c) --> 3
print(original.d) --> 4
print(original.b.y) --> 20
print(original.b.z) --> 30

http://www.lryc.cn/news/621366.html

相关文章:

  • 【JDK】Linux 系统下 JDK 安装与环境变量配置全教程
  • Auto-Coder的CLI 和 Python API
  • TOTP算法与HOTP算法
  • 下标访问操作符 [] 与函数调用操作符 ()
  • 【软考中级网络工程师】知识点之常用网络诊断和配置命令
  • Qt---Qt函数库
  • 深度学习-卷积神经网络CNN-膨胀卷积、可分离卷积(空间可分离、深度可分离)、分组卷积
  • 小知识点:splice与slice
  • 5.Ansible-playbook-模块介绍(知识点补充)
  • 【从零开始学习Redis】项目实战-黑马点评D1
  • Rabbitmq+STS+discovery_k8s +localpv部署排坑详解
  • 迅雷链接在线解密解析工具系统源码/本地化API/开源(源码下载)
  • TCP 连接管理:深入分析四次握手与三次挥手
  • NetLimiter:精准掌控网络流量,优化网络体验
  • vue3+leaflet案例:告警系统GIS一张图(附源码下载)
  • 新增和编辑共用弹窗模板
  • 深度解析 Vue 高阶技巧:提升工程化能力的实用方案
  • 机器人伴侣的智能升级:Deepoc具身智能模型如何重塑成人伴侣体验
  • AI驱动的智能爬虫架构与应用
  • C++中的链式操作原理与应用(三):专注于异步操作延的C++开源库 continuable
  • 开发避坑指南(26):Vue3 input输入框前置后 置元素解决方案
  • uniapp开发动态添加密码验证
  • 【力扣322】零钱兑换
  • C++ 排序指南
  • Kafka下载和安装
  • Ubuntu 22.04 远程桌面设置固定密码的方法
  • HQA-Attack: Toward High Quality Black-Box Hard-Label Adversarial Attack on Text
  • CoreShop商城框架开启多租户(3)
  • PyTorch 2025全解析:从基础到前沿,深度学习框架的技术演进与实战指南
  • ESP32入门开发·通用硬件定时器 (GPTimer)