当前位置: 首页 > 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.dtcms.com/a/331440.html

相关文章:

  • Mysql基本使用语句(一)
  • [激光原理与应用-271]:理论 - 波动光学 - 电磁波谱,光是一种可视化的电磁波
  • 广义矩估计随机近似中1.2和2.1的差异
  • 获取iframe中canvas画面
  • 爬虫数据存储全攻略:从 Robots 协议到文件存储
  • C++11新特性深度解析
  • Linux软件下载菜单脚本
  • Effective C++ 条款41:理解隐式接口和编译期多态
  • 系统设计——DDD领域模型驱动实践
  • 深入浅出词向量(Word2Vec):从理论到实践
  • 数据结构初阶(13)排序算法-选择排序(选择排序、堆排序)(动图演示)
  • 【Java 后端】Spring Boot 集成 JPA 全攻略
  • HTTPS 工作原理
  • 电池充放电测试仪厂家:技术深耕与场景驱动的行业进阶
  • Java使用Apache POI读取Excel文件
  • Vue浅学
  • 深入解析 GitHub Actions 工作流文件编写:从入门到实战
  • 简单的 HTTPS 学习
  • 第四天-创建一个Classic CAN(经典CAN2.0)/CANFD的系统描述ARXML文件
  • 读From GPT-2 to gpt-oss: Analyzing the Architectural Advances
  • IPv6互联网地址解析
  • 从合规到卓越:全星QMS如何成为制造企业的质量战略引擎
  • linux 软硬链接详解
  • 《算法导论》第 25 章:所有结点对的最短路径问题
  • 计算机视觉CS231n学习(8)
  • 12 ABP Framework 租户管理
  • 介绍一下 自动驾驶 感知多任务训练模型设计
  • 面试题:如何用Flink实时计算QPS
  • 第4节 神经网络从公式简化到卷积神经网络(CNN)的进化之路
  • 第三章、GRU(门控循环网络,Gated Recurrent Unit)