【问题标题】:How do I make a function execute if a property of an object is changed in LUA?如果在 LUA 中更改了对象的属性,如何使函数执行?
【发布时间】:2020-11-22 03:17:08
【问题描述】:

所以我希望在检测到属性更改后使用一个函数。我该怎么做

【问题讨论】:

标签: function lua


【解决方案1】:

这可以使用元方法__index__newindex 来实现,但有一些限制。您需要使用代理表,即结果表与观察表不同,因为只有当表不包含键时才会调用元方法__newindex

如果你需要观察嵌套表的属性,你必须创建递归代理表并动态修改它。

<script src="https://cdn.jsdelivr.net/npm/fengari-web@0.1.4/dist/fengari-web.js"></script>

<script type="application/lua">

function observable(data, callback)
  return setmetatable({}, {
    __index = data,
    __newindex = function(self, n, v)
      local oldv = data[n]
      if v ~= oldv then
        data[n] = v
        callback(n, v, oldv)
      end
    end
  })
end


local my_object = { test1 = 'value1' }
my_object = observable(my_object,
  function(key,value,oldvalue)
    print('key='..key
          ..', value='..tostring(value)
          ..', oldvalue='..tostring(oldvalue))
    end)

my_object.test1 = 1
my_object.test2 = 2
my_object.test1 = 'othervalue'
my_object.test2 = nil

</script>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-05
    • 1970-01-01
    • 2020-11-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多