lua|lua多重返回值
text":"我们在学习c语言时 , 函数只能返回一个值 , 但是对于lua来说 , 可以有多个返回值 , 我们来举例说明:
s , e = string.find(\"hello world\"\"world\")
print(se) -->7 11
这个字符串函数返回有两个参数(两个字符串) , 返回第二个参数(第二个字符串)在第一个字符串中地位置 , 从一开始计数 。 参数分为形参和实参
形参:函数定义时参数表中的参数 实参:调用函数时传入的参数
形参是在定义时 , 实参是在调用时传入的参数 , 这个要区分开 。
在lua编写函数同样也可以返回多个值 , 这个时候我们需要用return关键字来从函数中返回这些值 , 现在我们需要从一个数组中查找最大元素的值 , 并且返回这个值及它的位置
function maximum(a) -->a代表一个数组形参
local mi = 1
local m = a[mi
-->初始化一个默认值和位置用于比较
for ival in ipairs(a) do
if val > m then
mi = i
m = val --> 通过泛型for得到最大值和位置
end
end
return mim
end
函数编写过后就可以调用 , 传入一个实参数组
print(maximum({123456)) --> 6 6
lua会调整一个函数返回的值来适应各种不同的调用情况 , 分几种情况
1 函数调用作为一个单独语句时 , lua会丢弃函数的所有返回值
2 函数作为表达式的一部分来调用时 , lua只保留函数的第一个返回值
【lua|lua多重返回值】3 函数调用是一系列表达式中的最后一个元素(或仅有一个元素)时 , 才能返回全部的值 。
这里面的一系列表达式为:多重赋值、函数调用时传入的实参列表、table构造式和return语句 。
函数定义:
function f() end -->没有返回值
function f1() return \"a\" end -->返回一个值
function f2() return \"a\"\"b\" end -->返回两个值
xy = f2() -->x = \"a\"y = \"b\"
x = f2() ->x = \"a\"\"b\"被丢弃了
xyz = 11f2() -->x = 10y = \"a\"z = \"b\"
根据变量的个数调整返回值的个数 , 也就是第三种情况 , 返回尽可能多的值 。 如果返回的值不够 , 那么就会用nil(空值)来代替 。 函数不是一系列表达式最后一个元素 , 那么只产生一个值 。
当一个函数调用作为另一个函数调用的最后一个实参时 , 那么作为实参的这个函数调用将所有返回值传入到调用者中 。
table构造式可以接受不同数量的实参 , 在函数调用作为talbe中最后一个元素时 , 可以接受全部返回的值 , 在其它位置只接收一个值 。
最后是return语句 , return f()这样的语句返回f的所有返回值 。 如果对函数调用加上一个括号则只返回一个值
return (f())
这里介绍一个unpack函数 , 它接收一个数组参数 , 并从下标1开始返回该数组的所有元素:
print(unpack{203040) -->20 30 40
ab = unpack{203040 -->a = 20 b = 30 40被丢弃
"
推荐阅读
- 四川绵竹民警连夜在外抗洪 返回时派出所被洪水淹没
- 派出所|四川绵竹民警连夜在外抗洪 返回时派出所被洪水淹没
- 派出所|四川德阳绵竹民警连夜在外抗洪 返回时派出所被洪水淹没
- 央视新闻客户端|四川德阳绵竹民警连夜在外抗洪 返回时派出所被洪水淹没
- 看完她42岁的穿搭,终于明白,穿衣显气质对于一个女性有多重要
- 唐纳德·特朗普|特朗普携妻儿返回白宫:梅拉尼娅太美,巴伦太帅,特朗普太阴沉
- |潜逃15年涉黑恶嫌犯被从多米尼加遣返回国
- 一名潜逃15年的涉黑恶犯罪嫌疑人被从多米尼加遣返回国
- |烈日下登船检查从疫区返回的货轮 边防民警身着防护服如同蒸桑拿
- 安全|尼日利亚4名遭绑架中国公民获救 已安全返回健康状况良好
