lua学习笔记14:函数多返回值

Lua中函数可以返回多个值,为了说明不同情况下,返回值的个数,我们先声明如下几个函数:

-- 无返回值
function fun0()
end

-- 一个返回值
function fun1()
	return 1
end

-- 二个返回值
function fun2()
	return 1, 2
end

-- 三个及多个返回值
function fun3()
	return 1, 2, 3
end

通常情况下,Lua会根据函数调用的不同情况自动调整返回值的有效个数。主要有以下几种情况:

1. 调用作为单独语句,则丢弃所有返回值;

例如:

fun0()
fun1()
fun2()
fun3()

2. 调用作为表达式,又可分为两种情况:

2.1 如果处于表达式串中除了2.2之外的情况,则只有第一个返回值被返回;

例如:

if (fun2() == 1) then		-- 只返回1
	print(fun2())			-- 打印1, 2
	print(fun2(), "end") 	-- 打印1, "end"
	-- 如果想强制只返回一个值,则可以用括号 "()" 把表达式括起来即可:
	print((fun2()))			-- 打印1
end

2.2 在多赋值,返回值作为实参来调用其他函数,table中,return语句中,如果处于最后一个表达式,则所有的返回值都有效;

例如:

在多重赋值中,如果函数调用作为仅有的或最后一个表达式,则返回尽可能多的值来匹配左边的变量,

如果多出,自动丢弃;如果不够,赋为nil。

x = fun0() -- x = nil
x = fun1() -- x = 1
x = fun2() -- x = 1, 2丢弃
x = fun3() -- x = 1, 2, 3 丢弃

x, y = fun1() -- x = 1, y = nil
x, y = fun2() -- x = 1, y = 2
x, y = fun3() -- x = 1, y = 2, 3 丢弃

x, y, z = fun2() -- x = 1, y = 2, z = nil
x, y, z = fun3() -- x = 1, y = 2, z = 3

另外,函数unpack可以返回多个值,它传入一个数组,然后返回array中的每一个值。

时间: 2024-10-29 21:51:11

lua学习笔记14:函数多返回值的相关文章

Python学习笔记之函数作为返回值、闭包的解释

函数作为返回值 高阶函数除了可以接受函数作为参数外,还可以把函数作为结果值返回. 我们来实现一个可变参数的求和.通常情况下,求和的函数是这样定义的: def calc_sum(*args): ax = 0 for n in args: ax = ax + n return ax 但是,如果不需要立刻求和,而是在后面的代码中,根据需要再计算怎么办?可以不返回求和的结果,而是返回求和的函数! def lazy_sum(*args): def sum(): ax = 0 for n in args:

lua学习笔记之函数

Lua学习笔记之函数 1.  函数的作用 函数主要完成指定的任务,这样的情况下函数作为调用语句使用,函数可以计算并返回值,这样的情况下函数作为赋值语句的表达式使用. 语法: funcationfunc_name(arguments-list) Statements-list end 调用函数的时候,如果参数列表为空,必须使用()表示是函数调用. Print(8*9,9/8) a = math.sin(3) +math.cos(10) print(os.date()) 上述规则有一个例外,当函数只

SpringMVC学习笔记三:Controller的返回值

springMVC的返回值有ModelAndView,String,void,Object类型 项目目录树: 该项目是在前面项目的基础上修改的,这里的pom.xml文件需要加入使用到的包,应为@ResponseBody需要使用的包 <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-core</artifactId> <version&

Lua学习笔记3. 函数可变参数和运算符、转义字符串、数组

1. Lua函数可以接受变长数目的参数,和C语言类似,在函数的参数列表中使用(...)表示函数可以接受变长参数 lua函数将参数存放在一个table中,例如arg,那么#arg可以获得参数的个数 function func_no_p(...) local arg={...} for k,v in pairs(arg} do print(v ..",") end print("输入参数个数:".. #arg) end func_no_p(1,2,34,1,"

lua学习笔记14:字符串分割

在处理http请求返回的数据时,经常会用到字符串分割.lua号称"脚本精灵",是一门小而精的语言,它并没有给我们实现字符串的分割. 拒绝前戏,直接高潮,上代码: ----------------------------------------------------------------------- -- des:字符串分割 -- arg:str-要被分割的字符串 ,char-分割字符 -- log: add by 寒风 2014/11/13 -------------------

Lua学习笔记(六):函数-续

Lua中的函数是带有词法定界(lexical scoping)的第一类值(first-class values).第一类值指:在Lua中函数和其他值(数值.字符串)一样,函数可以被存放在变量中,也可以存放在表中,可以作为函数的参数,还可以作为函数的返回值.词法定界指:嵌套的函数可以访问他外部函数中的变量.这一特性给Lua提供了强大的编程能力. Lua中关于函数稍微难以理解的是函数也可以没有名字,匿名的.当我们提到函数名(比如print),实际上是说一个指向函数的变量,像持有其他类型的变量一样:

Lua学习笔记(五):函数

函数有两种用途: 1).完成指定的任务,这种情况下函数作为调用语句使用: 2).计算并返回值,这种情况下函数作为赋值语句表达式使用. 1 function func_name (arguments-list) 2 statements-list; 3 end; 4 5 --调用函数的时候,如果参数列表为空,必须使用()表明是函数调用 6 print(8*9, 9/8) 7 a = math.sin(3) + math.cos(10) 8 print(os.date()) 9 10 --上述规则有

lua学习笔记之类型和值

Lua学习笔记之类型和值 1.全局变量 全局变量不需要声明,给一个变量赋值后即创建了这个全局变量,访问一个没有初始化的全局变量也不会出错,只不过得到的结果是:nil 如果需要删除一个全局变量,只需要将变量赋值为nil 2.词法约定 标识符:字母或者下划线开头的字母.下划线.数字序列,最好不要使用下划线家大写字母的标识符,因为lua的保留字也是这样的. 3.命令行方式 Lua[options][script[args]] -e:直接将命令传入lua Prompt>lua –e "print(

Lua学习笔记--函数初探

感觉学习语言的话,函数是个重头戏.来看一下Lua的函数是神马样纸的东东! 一.简单的函数例子 --一个简单的函数:阶乘 function factorial(num) if num == 0 then return 1 else return num * factorial(num - 1) end end 恩,这就是个函数.function关键字,说明这是个函数,然后是函数名,后面跟的是参数列表,使用括号括起来.函数的结尾需要一个end关键字,表明函数结束了. 下面看以下怎么调用: --一个简