首页 > 解决方案 > 检测 Lua 中嵌套表的所有更改

问题描述

假设我有一个这样的嵌套表:

local a = {
  b = {
    c = {
      d = 'e'
    }
  },
  f = {
    g = {
      h = {
        i = 'j'
      }
    }
  }
}

(忽略变量名,它们只是占位符)

所以我想知道的是,每次修改该表或其任何子表时,我如何触发一个函数。例如,如果我这样做a = { 'something' }或如果我这样做a.b = { 'something' }或如果我这样做a.b.c = { 'something' }等等。在使用__newindex代理表的元表中使用元方法我只能在第二种情况下触发该函数。(例如:当我这样做时a.b = { 'something' }

有没有办法在每次修改嵌套表的任何元素时触发它?我需要它的原因是因为表需要缓存某些值的索引,所以当一个值改变时,我需要重新缓存表。

感谢您的帮助。提前致谢。

标签: lualua-table

解决方案


如果要监视嵌套表中的分配,每个表都需要一个 __newindex 元方法。


推荐阅读