print("************函数操作*****************")
--[[
--function 函数名
end
]]
--[[
a=function()
end
]]
print("************无参数无返回值*****************")
function F1()
print("函数1");
end
F1();
F2=function ( )
-- body
print("函数2");
end
F2();
print("************有参数*****************")
function F3( a )
-- body
print(a)
end
F3(1);
F3("123");
F3();
function F4( a,b,c,d)
-- body
print(a..b..c..d);
end
F4("a","b","c","d");
print("************有返回值*****************")
function F5( a )
-- body
return a,"123",17895;
end
temp,temp2=F5("a");
print(temp..temp2)
print( F5("a"));
print("************函数的类型*****************")
F6=function ( )
print("123");
end
F6();
print(type(F6));
print("************函数重载*****************")
--不支持重载
print("************变长函数*****************")
--变长函数需要用一个表存起来,在使用
function F7( ... )
arg={...}
for i=1,#arg do
print(arg[i])
end
end
F7(1,2,3,4,5,6,7,8);
print("************函数嵌套*****************")
function F8()
return function ( ... )
print("123456");
end
end
F9= F8();
print(F9())
--闭包
function F10( x )
return x,function ( y )
-- body
return x+y;
end
end
x,F11=F10(110);
print(x);
num= F11(10);
print(num);
闭包:在函数内部返回一个函数,并改变了这个函数内部临时变量生命周期(通过调用含有一个内部函数加上该外部函数持有的外部局部变量(upvalue)的外部函数(就是工厂)产生的一个实例函数)
代码解释:在上述代码F10的方法中,传入的x的值是一个临时变量,本来是F10在执行完毕以后就没用了,但是在内部中又一次使用,在F11中继续使用,改变了x参数的生命周期,形成了闭包