检测变量的变化并做出相应的反应 [Lua]

我想检查一个变量是否变化。我知道可能用循环可以做到,但我不想使用循环。我希望检查有所反应的方式是一旦变量发生变化,我可以选择相应的函数来使用。

点赞
用户88888888
用户88888888

诚实地说,就我所知,唯一的方法是使用循环。不过你可以这样做:

var = "Hello, World!"
changed_var = var

function onChangedVar()
     --变量变化时您想发生的任何事情
end

while true do
     if var ~= unchanged_var then
          onChangedVar()
          break
     end
end
2020-01-27 04:29:25
用户4984564
用户4984564

如果你真的希望这个过程是透明的,不太在意速度和可能会破坏事物,你可以使用元表:

local name = "proxied" -- 你的变量名称
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

请注意这些缺点

  • 难看
  • 易碎
  • 一般来说是个坏主意
2020-01-27 12:47:41