Обнаружить изменение в переменной и ответить соответственно [Lua] - PullRequest
2 голосов
/ 26 января 2020

Я хочу проверить переменную и посмотреть, изменилась ли она. Я знаю, что это возможно с петлями, но я не хочу их использовать. Я хочу, чтобы проверка отвечала так: когда переменная изменится, я могу выбрать, какую функцию использовать соответственно.

Ответы [ 2 ]

2 голосов
/ 27 января 2020

Если вы действительно хотите, чтобы это было прозрачным и не слишком заботились о скорости и, возможно, поломках, вы можете просто использовать метатаблицы:

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

Обратите внимание, что это это

  • Медленно
  • Гадкий
  • Хрупкий
  • Просто плохая идея в целом
0 голосов
/ 27 января 2020

Честно говоря, единственный способ сделать это, насколько я знаю, это использовать циклы. Вы можете сделать что-то вроде этого, хотя:

var = "Hello, World!"
changed_var = var

function onChangedVar()
     --Whatever you want to happen when the variable changes
end

while true do
     if var ~= unchanged_var then
          onChangedVar()
          break
     end
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...