CWDG论坛-专业魔兽插件's Archiver

stock 发表于 2008-7-20 08:29

基础问题,两个函数的写法不同,是否一个意思

第一个函数
function func1()
。。。。
end

第二个函数
func1=function ()
。。。
end

func1是不是都表示对函数的引用,func1不是函数名吧

carl2500 发表于 2008-7-20 08:57

在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

Xstubborn 发表于 2008-9-5 20:01

两种写法效果都一样的,
不过
func1=function()...end
更体现OO的思想罢了,
按照JAVA的解释就是function()...end创造了一个function对象,并把function对象的引用交给了func1

页: [1]

Powered by Discuz! Archiver 6.1.0  © 2001-2007 Comsenz Inc.