LUA教程函数多返回值-17

更新时间:2023-07-19 05:17:54 阅读: 评论:0

LUA教程函数多返回值-17
Lua函数可以返回多个结果值,⽐如string.find,其返回匹配串“开始和结束的下标”(如果不存在匹配串返回nil)。
s, e = string.find("hello Lua urs", "Lua")
print(s, e)      --> 7  9
Lua函数中,在return后列出要返回的值得列表即可返回多值,如:
function maximum (a)
local mi = 1            -- maximum index
local m = a[mi]          -- maximum value
for i,val in ipairs(a) do
if val > m then
mi = i
no是什么气体
m = val
end
end
古埃及return m, mi
end
print(maximum({8,10,23,12,5}))    --> 23  3
Lua总是调整函数返回值的个数以适⽤调⽤环境,当作为独⽴的语句调⽤函数时,所有返回值将被忽略。假设有如下三个函数:
function foo0 () end                  -- returns no results
夏日传奇function foo1 () return 'a' end        -- returns 1 result
内参选编
function foo2 () return 'a','b' end    -- returns 2 results
第⼀,当作为表达式调⽤函数时,有以下⼏种情况:
1. 当调⽤作为表达式最后⼀个参数或者仅有⼀个参数时,根据变量个数函数尽可能多地返回多个值,不⾜补nil,超出舍去。
2. 其他情况下,函数调⽤仅返回第⼀个值(如果没有返回值为nil)
x,y = foo2()            -- x='a', y='b'
x = foo2()              -- x='a', 'b' is discarded
x,y,z = 10,foo2()        -- x=10, y='a', z='b'
藏族电影x,y = foo0()            -- x=nil, y=nil
x,y = foo1()            -- x='a', y=nil
offer是什么意思x,y,z = foo2()          -- x='a', y='b', z=nil
x,y = foo2(), 20        -- x='a', y=20
x,y = foo0(), 20, 30    -- x='nil', y=20, 30 is discarded
第⼆,函数调⽤作为函数参数被调⽤时,和多值赋值是相同。
print(foo0())            -->
print(foo1())            --> a
print(foo2())            --> a  b
print(foo2(), 1)        --> a  1
print(foo2() .. "x")    --> ax
第三,函数调⽤在表构造函数中初始化时,和多值赋值时相同。
a = {foo0()}            -- a = {}    (an empty table)
a = {foo1()}            -- a = {'a'}
a = {foo2()}            -- a = {'a', 'b'}
a = {foo0(), foo2(), 4}  -- a[1] = nil, a[2] = 'a', a[3] = 4
另外,return f()这种形式,则返回“f()的返回值”:
function foo (i)
if i == 0 then return foo0()
elif i == 1 then return foo1()
elif i == 2 then return foo2()
end
end
print(foo(1))        --> a
print(foo(2))        --> a  b
print(foo(0))        -- (no results)
print(foo(3))        -- (no results)
可以使⽤圆括号强制使调⽤返回⼀个值。
才自精明志自高
print((foo0()))      --> nil
print((foo1()))      --> a
print((foo2()))      --> a
⼀个return语句如果使⽤圆括号将返回值括起来也将导致返回⼀个值。
函数多值返回的特殊函数unpack,接受⼀个数组作为输⼊参数,返回数组的所有元素。unpack被⽤来实现范型调⽤机制,在C语⾔中可以使⽤函数指针调⽤可变的函数,可以声明参数可变的函数,但不能两者同时可变。在Lua中如果你想调⽤可变参数的可变函数只需要这样:
f(unpack(a))
unpack返回a所有的元素作为f()的参数
f = string.find
a = {"hello", "ll"}
print(f(unpack(a)))      --> 3  4
基地英文预定义的unpack函数是⽤C语⾔实现的,我们也可以⽤Lua来完成:
function unpack(t, i)
i = i or 1
if t[i] then
return t[i], unpack(t, i + 1)
end
end
原⽂:

本文发布于:2023-07-19 05:17:54,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/fan/89/1087333.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:函数   返回   可变   参数
相关文章
留言与评论(共有 0 条评论)
   
验证码:
推荐文章
排行榜
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图