2015-07-10 57 views
1

所以我正在脑力激荡一些关于编程的东西,基本上是lua中的一个逻辑模拟器。我必须彻底检查整个系统,但我认为基于事件的操作可能比不断的更新操作更好。布尔变化事件的Lua?

我有类似:

local var1 = false 
local var2 = false 
while true do 
    if key == "a" then 
    var1 = not var1 
    end 
    if key == "s" then var2 = not var2 end 
    var2 = var1 
end 

但我想是这样的:

local var1 = false 
local var2 = false 
while true do 
    if key == "a" then 
    var1 = not var1 
    end 
    if key == "s" then var2 = not var2 end 
    if on.change(var1) then 
    var2 = var1 
    end 
end 

所以,是的,我想VAR2是独立的,我不希望它保持自身设置作为var1,我只想让var2对var1做出反应,如果var1发生了变化。

如果我们看一下第一个代码块,你看,我真的不能独立控制VAR2,它总是把自身设置VAR1,它可以设置自己VAR1的时间真的很短的时间。

如果我们看一下第二个代码块,你可以看到,我可以从VAR1独立控制VAR2,并将它仍然反应VAR1。

现在最类似的事情将是做这样的事情:

local var1 = false 
local var2 = false 
while true do 
    if key == "a" then 
    var1 = not var1 
    var2 = var1 
    end 
    if key == "s" then 
    var2 = not var2 
    end 
end 

但恐怕这不会是真的有可能实现,而且它会慢下来,因为这是很多循环,加入更多的嵌套循环会真的减慢它...

所以请发布类似于第二个代码块上的事件,我已经发布了类似的,但它会很难实现,并且会出现严重的副作用,比如我正在做的嵌套循环。

谢谢您的时间!

+0

而且这将是很难实现,因为它必须看看另一个变量,它应该工作** **没有在按键的原因。 – EEVV

回答

1

你可以做这样的东西和元表(伪):

local mt = { __index = function(i,v) 
    if i == "var1" then 
     var1 = v 
     var2 = v 
    end 
end } 

_G.setmetatable(mt) 

但我建议你谷歌足以使一些库会自动做到这一点。

+0

好的,谢谢,我将搜索metatables – EEVV

+0

此外我还没有找到任何库,我已经搜索了lua事件处理程序或lua事件,甚至在变化事件lua上。我会试着理解这段代码,下划线使它更难... – EEVV

+0

@EEVV字面上有两个下划线,表示元字节__index'字段。 (另一个在全局上下文值_G')回到你的Lua书。 –