检测 Lua 中嵌套 table 的所有更改

Detect all changes to a nested table in Lua

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

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

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

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

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

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

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