Lua学习---函数定义
2017-01-09 10:23
302 查看
1.函数定义的格式:
Lua使用function定义函数,语法如下:function function_name (arc) --arc表示参数列表,函数的参数列表可以为空
--body
end
上面的语法等价于:
function_name function_name (arc)
--body
end_
上面的方法都是定义了一个全局函数,为了不污染命名空间,同时减少性能损耗,我们应该尽量使用“局部函数”,方法如下(只需要再前面加local声明即可):
local function function_name (arc) --arc表示参数列表,函数的参数列表可以为空
--body
end
注意:Lua函数的本质是变量赋值,所以再使用函数之前,一定要先定义函数(C语言可以再后面定义,前面声明,但是Lua没有声明,只有定义)
由于函数定义等价于变量赋值,也就可以把函数名替换为Lua某个表的字段,如:
function Foo.bar(a, b, c) --此时不能再加local函数声明了 end
2.函数参数
1)Lua函数的参数大部分是按值传递的。函数传参的几个规则:
a、若参数个数大于形参个数,从左向右,多余的实参被忽略
b、若实参个数小于形参个数,从左向右,没有被初始化的形参被初始化为nil
c、Lua还支持变长参数。用...表示。此时访问参数也要用...,如:
local function func(...) --形参为 ... ,表示函数采用变长参数 local temp = {...} --访问的时候也要使用 ... local ans = table.concat(temp, "") --使用table.concat库函数,对数组内容使用" "拼接成字符串。 print(ans) end func(1, 2) --传递了两个参数 func(1, 2, 3, 4) --传递了四个参数 -->output 1 2 1 2 3 4
2)当函数参数是table类型时,传递进来的实际上是实际参数的引用。如具名函数
3.函数的返回值
Lua函数允许返回多个值,返回多个值时,中间用逗号隔开函数返回值的规则:
1)若返回值个数大于接收变量的个数,多余的返回值会被忽略掉;
2)若返回值个数小于参数个数,从左向右,没有被返回值初始化的变量会被初始化为nil
函数返回值与表达式:
1)当一个函数返回一个以上的返回值,且函数调用不是一个列表表达式的最后一个元素,那么函数只返回第一个返回值,如:
local function init() --init函数返回两个值 1和"lua" return 1, "lua" end local x, y, z = init(), 2 --init函数的位置不在最后,此时只返回 1 print(x, y, z) -->output 1 2 nil local a, b, c = 2, init() --init函数的位置在最后,此时返回 1 和 "lua" print(a, b, c) -->output 2 1 lua
2)如果你确保只取函数返回值的第一个值,可以使用括号运算符,例如:
local function init() return 1, "lua" end print((init()), 2) -->output 1 2 print(2, (init())) -->output 2 1
相关文章推荐
- 腾讯开源手游热更新方案Xlua尝鲜(二)——执行Lua字符串和Lua文件加载
- lua以xpcall实现try/catch功能
- 腾讯开源手游热更新方案Xlua尝鲜(一)
- lua string.gsub 替换ios 路径失败
- Lua基础之math库总结(数学函数库)
- Lua的协程
- 399. Evaluate Division
- Speaker Recognition Evaluation 2012
- Lua5.3云风译
- 简单谈谈lua和c的交互
- lua文件操作详解
- Lua中函数与面向对象编程的基础知识整理
- Lua的面向对象
- 让lua的gc替我们回收c的堆变量
- Lua 一些常用方法的区别
- tolua动态注册对象的使用
- Lua的for in和pairs
- 一些有意义的lua方法集
- VSCode Lua 高亮代码
- lua oop[0]:实现基本的OO 框架