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是否被调用是有区别的。

时间: 2024-10-06 22:49:27

lua中的handler和function()作为函数参数的不同的相关文章

Lua中实现类似C语言的函数重载

Lua不支持像C那样的重载,例如,像下面这种形式在Lua中无法得到预期结果 1 function Add(a,b) 2 return a + b 3 end 4 5 function Add(a,b,c) 6 return a + b + c 7 end 但是,Lua中函数对于传入的参数个数也很宽松,它会自动去适应传入的参数,如果传入的参数个数多于定义的个数,则会自动忽略后面多于的参数,如果传入的参数个数少于定义的个数,则会将不足的参数用nil补齐.例如,上述希望实现的重载可以用下面的形式完成:

Lua中的常用语句结构以及函数

1.Lua中的常用语句结构介绍 --if 语句结构,如下实例: gTable = {"hello", 10} if nil ~= gTable[1] and "hello" == gTable[1] then print("gTable[1] is" , gStringTable[1]) elseif 10 == gTable[2] then print("gTable[2] is", gTable[2]) else prin

Lua中编译执行代码相关的函数以及机制

可以说Lua之所以称为是一种解释型的语言,正是因为有诸如load这样的函数,因为这样的函数使得Lua可以执行动态生成的代码.下面具体来分析这些函数.   load函数 load函数原型如下: load (chunk [, chunkname [, mode [, env]]]) 该函数加载一个chunk,如果没有错误,则返回一个函数.如果传入chunk的值是一个字符串,则就加载这个字符串:如果传入chunk的值是一个函数,则这个函数必须返回一个字符串,并且load会一直调用这个函数,直到这个函数

C语言中值得深入知识点----数组做函数参数、数组名a与&a区别、数组名a的"数据类型"

1.数组作为函数参数 C语言中,数组做为函数的参数,退化为指针.数组作为参数传给函数时,传的是指针而不是数组,传递的是数组的首元素的地址.这里我们以将以整形变量排序来讲解. void sortArray(int a[] ,int num )以及void sortArray(int a[100] ,int num )都可以用void sortArray(int *a ,int num )表示.一般来说函数参数如果为数组,可以有两个参数,一个是数组名,一个是数组长度.对于排序而已,一般是要知道给定数

Lua中的closure(闭合函数)

词法域:若将一个函数写在另一个函数之内,那么这个位于内部的函数便可以访问外部函数中的局部变量,这项特征称之为“词法域”. 例:假设有一个学生姓名的列表和一个对应于没个姓名的年级列表,需要根据每个学生的年级来对他们的姓名进行排序(由高到低).可以这么做: names = {"Peter", "Paul", "Mary"} grades = {Mary = 10, Paul = 7, Peter = 8} table.sort(names, func

cocos2d-x lua中实现异步加载纹理

原文地址:  http://www.cnblogs.com/linchaolong/p/4033118.html 前言   问题:最近项目中需要做一个loading个界面,界面中间有一个角色人物走动的动画,在显示这个loading界面的时候加载资源,项目是用cocos2d-x lua实现的,界面做出来后发现在加载资源的时候界面会卡住. 原因: 因为使用的不是异步加载,而且cocos2d-x没有绑定异步加载资源的api到lua中,其实在lua中实现不了异步. 想通过在lua中启动一个线程去加载资源

Lua语言基础汇总(13)-- Lua中一些常用的库

前言 这篇文章将会来一些比较轻松的内容,就是简单的介绍一下Lua中几个常用的库.简单的说就是几个API的介绍.所以说,看起来比较容易,也没有多大的分量.就是纯粹的总结.使用库就是为了方便我们的开发,提高开发效率,同时也能保证代码的质量.希望大家以后也不要重复造轮子了. 数学库 数学库(math)由一组标准的数学函数构成.这里主要介绍几个常用的函数,其它的大家可以自行百度解决. 1. 三角函数(sin,cos,tan……) 所有的三角函数都使用弧度单位,可以用函数deg(角度)和rad(弧度)来转

Lua中的一些库(1)

[数学库] 数学库(math)由一组标准的数学函数构成.这里主要介绍几个常用的函数,其它的大家可以自行百度解决. 三角函数(sin,cos,tan--)所有的三角函数都使用弧度单位,可以用函数deg(角度)和rad(弧度)来转换角度和弧度.示例代码: print(math.sin(math.rad(30))) -- 0.5 谨记:三角函数的参数都是弧度,在实际使用中不要忘了,是弧度. 取整函数(floor,ceil) floor:返回不大于x的最大整数:向下取整:ceil:返回不小于x的最大整数

Lua中的模块(module)和包(package)详解1

这篇文章主要介绍了Lua中的模块(module)和包(package)详解,本文讲解了require函数.写一个模块.package.loaded.module函数等内容,需要的朋友可以参考下 前言 从Lua5.1版本开始,就对模块和包添加了新的支持,可是使用require和module来定义和使用模块和包.require用于使用模块,module用于创建模块.简单的说,一个模块就是一个程序库,可以通过require来加载.然后便得到了一个全局变量,表示一个table.这个table就像是一个命