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被丢弃
"


    推荐阅读