2017-07-13 85 views
0

東西令我着迷約Lua是,你可以從一個表中運行的任何功能,不管它是否返回任何東西,或不會,我說什麼就是一個例子事實:Lua是否可以「停止」表中的任何代碼執行?

local my_table = { 
    print("output from a table!"); 
    warn("more output from a table!"); 
}; 

有趣事情是,只要這個表創建了這個表中的兩個函數,並且my_table [1]和[2]都等於nil(因爲print和warn沒有返回值)。然而,是否有任何方法可以在創建表時執行「暫停」這兩個函數的執行,甚至可能在稍後「開始」運行它們(如果滿足某個條件)? 我將不勝感激任何幫助;謝謝

回答

4

你不是以這種方式存儲函數,你存儲調用的結果。

如果您需要功能,請明確創建匿名功能。

local mytable = { 
    function() print("output from a table!") end, 
    function() warn("more output from a table!") end 
} 

如果你不喜歡這種方式,還有另一種。捕獲詞法閉包中的函數和參數,並在調用閉包時應用存儲的參數。

local function delay(func, ...) 
    local args = {...} 
    return function() 
     func(table.unpack(args)) 
    end 
end 

local mytable = { 
    delay(print, "output from a table!"), 
    delay(warn, "more output from a table!") 
} 

mytable[1]() 
mytable[2]() 
+0

這是一個非常好的主意!根據我的情況,我會看看我能做些什麼才能正常工作,謝謝! :) –