【问题标题】:Detect all changes to a nested table in Lua检测 Lua 中嵌套表的所有更改
【发布时间】:2021-11-13 20:01:10
【问题描述】:

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

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

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

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

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

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

【问题讨论】:

    标签: lua lua-table


    【解决方案1】:

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

    【讨论】:

    • 我明白了,没有更简单或更简单的方法
    • 这有多复杂?无论如何,你有一个 __newindex。只需将相同的 __newindex 设置为每个分配的表值。唯一的替代选择是遍历整个表并将其值与一些未更改的副本进行比较。
    • 我认为 OP 可能希望像在问题中那样声明表,而不是单独设置值。这样做你可以添加一个__index,并在访问每个属性时将带有__index和__newindex的元表分配给任何被访问的表(如果它尚未分配)。这会阻止孩子们拥有自己的元表......
    猜你喜欢
    • 1970-01-01
    • 2020-11-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-02
    • 2018-11-21
    • 2014-08-12
    • 1970-01-01
    相关资源
    最近更新 更多