首页 > 解决方案 > 检测变量的变化并做出相应的响应 [Lua]

问题描述

我想检查一个变量,看看它是否改变。我知道循环可能是可行的,但我不想使用它们。我希望检查响应的方式是,一旦变量发生变化,我可以选择相应地使用哪个函数。

标签: variableslua

解决方案


如果你真的希望它是透明的并且不太关心速度和可能破坏的东西,你可以使用元表:

local name = "proxied" -- The name of your variable
do local proxy
   setmetatable(_G, {
      __index=function(self,idx) if idx==name then return proxy end end;
      __newindex=function(self,idx,val) if idx==name then proxy=val; getmetatable(self).callback(val) else rawset(self,idx,val) end end;
      callback=function(val) print("Proxied variable set to "..tostring(val)) end;
   })
end

请注意,这是

  • 减缓
  • 丑陋的
  • 一般只是一个坏主意

推荐阅读