1. 程式人生 > >lua中handler函式的理解

lua中handler函式的理解

在lua,封裝了一個hanlder的函式,之前對它一知半解,現在記錄下

原始碼如下:


function handler(obj, method) return function(...) return method(obj, ...) end end

由此可看到,handler通過接收的兩個引數obj, method建立了一個匿名函式並將其返回,並且呼叫匿名函式時所傳入的引數也將傳入method方法中,作為obj後面的引數。

我們來測試一下:

local test = test or {}
function test:onTouch() print "test in onTouch" end
function handler(obj, method) return function(...) return method(obj, ...) end end

-- print(handler(test,test.onTouch)) -- print(test.onTouch(test))
--輸出 -- function: 0086c9c8 -- test in onTouch
print( handler(test,test. onTouch)) print(( function()test. onTouch(test) end))
--輸出
-- function: 0054cd40 -- function: 0054cda0

結論:
handler只不過是對method進行封裝 套了一層匿名function並返回該匿名方法
所以handler(test,test.onTouch)()等價於test:onTouch()等價於test.onTouch(test)也同樣等價於(function()test.onTouch(test)end())()