基础问题,两个函数的写法不同,是否一个意思
第一个函数function func1()
。。。。
end
第二个函数
func1=function ()
。。。
end
func1是不是都表示对函数的引用,func1不是函数名吧 在Lua中,函数是一种“第一类值(First-Class Value)”,意思是Lua中的函数与其他传统类型的值(例如数字和字符串)具有相同的权利。
函数可以存储到变量中,可以作为实参传递给其他函数,也可以作为其他函数的返回值。
Lua中,函数与所有其他值一样是匿名的,即他们都没有名称,当我们讨论函数名(如print)时,实际上是在讨论一个持有某函数的变量。
由于函数是值,因而其创建也是通过赋值方式的
foo = function (x) return 2*x end
而
function foo(x) return 2*x end
只是上面写法的一种简化
因此,一个函数定义实际就是一条赋值语句,这条语句创建了一种类型为函数的值。
因为如此,我们常用的Hook就是这样的
LiteMail.Blz_InboxFrame_OnClick = InboxFrame_OnClick 实际上就是把InboxFrame_OnClick这个值保存到LiteMail.Blz_InboxFrame_OnClick中备用
然后我们再改变InboxFrame_OnClick的值InboxFrame_OnClick = function() this:SetChecked(nil) end,这样就实现了Hook 两种写法效果都一样的,
不过
func1=function()...end
更体现OO的思想罢了,
按照JAVA的解释就是function()...end创造了一个function对象,并把function对象的引用交给了func1
页:
[1]