lua学习笔记二--函数
来源:互联网 发布:什么是挂机软件 编辑:程序博客网 时间:2024/05/20 22:26
函数
多重返回值
Lua会调整一个函数的返回值个数以适应不同的调用情况。
- 将函数调用作为一个单独语句使用时,Lua 会丢弃函数的所有返回值。
- 将函数作为表达式的一部分来调用时,Lua 只保留函数的第一个返回值。
- 只有当一个函数调用是一系列表达式中的最后一个元素(或仅有一个元素)时,才能获得它的所有返回值。
这分为四种情况:
1、 多重赋值
多重赋值中,若一个函数调用是最后(或者仅有的一个表达式),那么 Lua
会保留其尽可能多的返回值。如果一个函数没有返回值或者没有足够多的返回值,Lua
会用 nil
来补充缺失的值;如果一个函数返回值对于被赋值对象个数,Lua
会舍弃对于的返回值。
function foo() return "a","b"endx,y = foo() -- x="a", y="b"x,y = 10, foo() -- x=10, y="a", "b"被舍弃x,y,z = foo(), 10 -- x="a", y=10, z=nilx,y,z = 10, foo() -- x="a", y="b", z=10
2、 函数调用时传入的实参列表
当一个函数调用作为另外一个函数调用的最后一个(或者仅有一个)实参时,第一个函数的所有返回值都将作为实参传入第二个函数
print(foo()) -- a bprint(10, foo()) -- 10 a bprint(foo(), 10) -- a 10print(foo() .. "x") -- axprint("x" .. foo()) -- xa
上例中的最后两行,当函数出现在一个表达式中时,Lua会将其返回值个数调整为1,所以 foo()
只返回了 “a”。
3、 table的构造式
table构造式可以完整的接收一个函数调用的所有返回结果,但是,这种行为只有当一个函数调用最为最后一个元素(或者仅有的一个元素)时才会发生,其他位置上的函数调用总是只产生一个返回值。
t = {foo()} -- t = {"a", "b"}t = {10, foo()} -- t = {10, "a", "b"}t = {10, foo(), 4} -- t = {10, "a", 4}
4、 return 语句
function foo2() return foo()endprint(foo2()) -- a b
如果将一个函数调用放在一对圆括号中,将强迫函数值返回一个结果
print((foo2())) -- a
变长参数 (variable number of arguments)
function add(...) local sum = 0 for i,v in ipairs({...}) do -- ipairs{...} sum = sum + v end return sumend
参数表中的 (...)
表示该函数可接受的不同数量的实参,当函数需要访问它的可变长实参时,{...}
将作为表达式来使用。
注意:在某些特殊情况下,可变长参数中可能会有 nil ,这样就不能通过 {…} 来访问所有的参数了
这种情况下,需要用到 select(index, ...)
函数。固定实参 index
为 n 时,函数返回可变参数中的第 n 个可变实参,当 index
为 '#'
时,函数返回可变实参总个数。
-- 使用 select 遍历可变长实参for i,select('#', ...) do local arg = select(i, ...) print(arg)end
0 0
- lua学习笔记二--函数
- lua脚本语言学习笔记(二)---LUA函数\数组\迭代器
- Lua学习笔记二
- Lua学习笔记二
- lua 学习笔记 二
- lua学习笔记(二)
- Lua学习笔记函数
- Lua学习笔记(二)—— 函数
- Lua 学习笔记(四) —— 函数(二)
- Lua学习笔记(二)
- Lua 学习笔记(二)
- Lua学习笔记(二)
- Lua学习笔记(二)
- 学习Lua笔记(二)
- Lua学习笔记(二)
- Lua学习笔记二--在Lua中使用自己的C函数
- Lua学习笔记二--在Lua中使用自己的C函数收藏
- Lua string函数学习笔记
- Ubuntu12.04增加屏幕分辨率选项
- Eclipse 3.7手工安装Maven2的插件(包含POM图形编辑工具)
- 查找文件位置的方法-find,grep,locate
- Spark(1)
- 用C#获取局域网内所有机器
- lua学习笔记二--函数
- Spring3.1包详解与依赖关系
- 侧滑(以Activity为页面)
- [DUBBO] Decode rpc invocation failed: null, dubbo version: 2.8.4, current host: 127.0.0.1
- 关于Android中MD5加密算法
- 查漏补缺——表达式
- Java NIO Path
- 用js给enter键添加事件
- SSH 的 action , Service , impl 关系 ?