2015-07-10 26 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書。 –