首页 > 代码库 > lua中的handler和function()作为函数参数的不同

lua中的handler和function()作为函数参数的不同

在quick-cocos2d-x lua的开发过程中,我们在传递参数的时候需要传入函数作为我们的参数,通常有两种方法,一种是使用function把我们的函数包起来,另一种是用handler将我们的函数封装起来,这两种方法在使用的时候是明显不同的,下面我就要贴出自己在quick中的代码来说明我理解的二者的不同。

首先是handler,如果我们的参数函数本身是没有参数的,那么应该是:

local MainScene = class("MainScene", function()
	return display.newScene("MainScene")
end)

function MainScene:ctor()
	
end

function MainScene:onEnter()
	self:func2(handler(self, self.func1))
end

function MainScene:func1()
	print("haha")
end

function MainScene:func2(func)
	func()
end

return MainScene

如果这个handler中所包装的函数是带参数的,那么代码应该是:

local MainScene = class("MainScene", function()
	return display.newScene("MainScene")
end)

function MainScene:ctor()
	
end

function MainScene:onEnter()
	self:func2(handler(self, self.func1)(22))
end

function MainScene:func1(h)
	print("haha" .. " " .. h)
end

function MainScene:func2(func)
	--func()
end

return MainScene

如果我们用function, 无论带不带参数,我们用如下的方法均可:

local MainScene = class("MainScene", function()
	return display.newScene("MainScene")
end)

function MainScene:ctor()
	
end

function MainScene:onEnter()
	self:func2(function()
		self:func1(22)
	end)
end

function MainScene:func1(h)
	print("haha" .. " " .. h)
end

function MainScene:func2(func)
	func()
end

return MainScene

注意:第一段代码和第二段代码的func2对于其中的func是否被调用是有区别的。


lua中的handler和function()作为函数参数的不同