您的位置:首页 > 编程语言 > Lua

5.lua学习笔记:函数

2014-12-02 23:56 513 查看
1.多重赋值:
在lua中可以多重赋值,和Python类似:
a, b = 1, 2
这样就能在函数中返回多个值了,并且lua的多重赋值更加智能,当值得个数多于变量的个数时,多余的值将被舍弃;
当变量的个数多于值得个数时,多余的变量将被赋值为nil;Python中的多重赋值需要变量和值得个数对应

如果在表达式中调用具有多重返回值的函数,只有函数在表达式的末尾时,表达式才能获取函数的所有结果,否则只能获取函数的第一个结果;
function test()
return 1,2,3
end

a, b = test(), 4 ------a==1, b==4
a, b = 4, test() ------a==4, b==1
a, b, c = 4, test() ------a==4, b==1, c==2 (多余的值舍弃)

2.变长参数:
lua中可以编写接受变长参数的函数,通过使用...来获取变长参数
如:
function add(...)
local sum = 0
local args = {...}
for k, v in ipairs(args) do
sum = sum + v
end
return sum
end
当一个函数的参数只有一个table的构造式时,函数调用的小括号是可有可无的,上面的代码可改为:
function add(...)
local sum = 0
for k, v in ipairs{...} do --红色部分是个大括号+...
sum = sum + v
end
return sum
end

3.默认值参数:
lua中的默认值参数不像其他语言那么方便,需要借助table来实现,如:
function testArgs(arg)
old = arg.old or 0
now = arg.now or 0
if now > old then
print("now bigger than old")
else
print("now litter than old")
end
end
调用测试:
testArgs({}) --now litter than old
testArgs{now=1} --now bigger than old

深入函数:
lua中函数名其实也是变量,函数的定义相当于赋值语句,

function f(x) return 2*x end

f = function(x) return 2*x end

4.闭包closure:
闭包就是在函数内部再定义一个函数,内部函数能够访问外部函数的局部变量,即时已经超出了外部函数的作用域;
相当于将外部函数的局部变量与内部函数绑定,使内部函数可以随意的访问,同时保留上一次访问的结果。
如:
function test()
local i = 0
function _test()
i = i + 1
return i
end
return _test
end

t = test() -- t == _test, 此时局部变量i就跟函数t绑定了,i就相当于函数t内的static变量
t() -- 1
t() -- 2
t() -- 3

5.非全局函数:
lua中,函数其实是匿名的,通常定义的函数是将匿名函数赋值给变量,所以,定义局部函数同定义局部变量一样;
local test
test = function (x, y) return x+y end
这样test就是一个局部函数了
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: