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

【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.xdnf.cn/news/17739.html

相关文章:

  • 分布式事务、锁、链路追踪
  • 地测管理部绩效考核关键指标与地质数据分析
  • 嵌入式 - Linux软件编程:进程
  • C01:内存操作函数
  • Origin绘制正态分布直方图+累积概率图|科研论文图表教程(附数据格式模板)
  • 可信搜索中的多重签名
  • mysql——count(*)、count(1)和count(字段)谁更快?有什么区别?
  • QLab Pro for Mac —— 专业现场音频与多媒体控制软件
  • Unity Shader unity文档学习笔记(十九):粘土效果,任意网格转化成一个球(顶点动画,曲面着色器)
  • 【代码随想录day 20】 力扣 669. 修剪二叉搜索树
  • 【CLR via C#(第3版)阅读笔记】类型基础
  • PostgreSQL——视图
  • 嵌入式C/C++面试大全
  • Gradle(四)Maven 项目迁移 Gradle 项目实践
  • spring mvc HttpMessageConverter 消息转换器
  • 【KALI】第一篇 安装Kali Linux虚拟机之详细操作步骤讲解
  • CNN - 卷积层
  • 利用 Java 爬虫按图搜索 1688 商品(拍立淘)实战指南
  • 高效TypeScript开发:VSCode终极配置指南
  • Varjo XR虚拟现实军用车辆驾驶与操作培训
  • 【MATLAB代码】滑动窗口均值滤波、中值滤波、最小值/最大值滤波对比。订阅专栏后可查看完整代码
  • OpenCV中对图像进行平滑处理的4种方式
  • 《多级缓存架构设计与实现全解析》
  • 【跨越 6G 安全、防御与智能协作:从APT检测到多模态通信再到AI代理语言革命】
  • 机器视觉的磁芯定位贴合应用
  • GraphRAG查询(Query)流程实现原理分析
  • Java+Vue构建的MES信息管理系统,含完整源码,功能涵盖生产跟踪、质量管控等,助力企业实现精细化、智能化生产管理
  • 【16-softmax回归】
  • AI 赋能的软件工程全生命周期应用
  • springboot+vue实现通过poi完成excel