lua中handler函式的理解
阿新 • • 發佈:2019-01-07
在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))
--輸出
結論:
handler只不過是對method進行封裝 套了一層匿名function並返回該匿名方法
所以handler(test,test.onTouch)()等價於test:onTouch()等價於test.onTouch(test)也同樣等價於(function()test.onTouch(test)end())()