Lua教程

Lua极简入门(六)——函数多返回值

2019-10-24  本文已影响0人  李小磊_0867

Java、C#之类的都不允许返回多个值,而Python、Go等允许返回多个值,这极大的方便了自定义函数时,扩展更多的功能。比如一个函数,除了返回结果外,还可以返回错误信息等。Lua也具备这点能力。

function getName()
    return "ray", "hu"
end
husband,wife = getName()
print(husband, wife)
-->> ray    hu

这种方式在很多场景下都很有效,可以完成其他语言需要借助对象才能完成的工作。比如从考试成绩中查找到最高分和最低分

function getHighAndMin(val)
    if val then
        high, min = val[1], val[1]
    end

    for i, v in pairs(val) do
        if high < v then
            high = v
        end
        if min > v then
            min = v
        end
    end

    return high, min
end

high, min = getHighAndMin({ 37, 59, 98, 87, 29, 99, 67 })
print(high, min)
-->> 99     29

通函数定义时,Lua有实参和形参之分,可以传递超过形参个数的实参,可以正好,也可以少于或者不传,针对不同情况,Lua会执行给形参赋值。对于多个返回值,Lua也有相应的读取返回值的规则。

function getName()
    return "ray", "hu"
end

getName()
-->>
function getName()
    return "ray", "hu"
end

function change()
    name = "ray"
end

a, b = getName()
print(a, b)
-->> ray    hu
a, b, c = getName()
print(a, b, c)
-->> ray    hu  nil
a, b = change()
print(a, b)
-->> nil    nil
function getName()
    return "ray", "hu"
end

a = getName()
print(a)
-->> ray
a, b, c = "xx", getName()
print(a, b, c)
-->> xx     ray     hu
function get()
    return 1, 2
end

a, b, c = get(), 6
print(a, b, c)
-->> 1   6  nil
a, b = get(), 6, 7
print(a, b)
-->> 1   6
function b()
    return 1, 2, 3
end

function a(a, b)
    return a + b
end

print(a(b()))       -- 3被舍弃
-->> 3
print(a(6, b()))    -- 传入1,2,3但2,3被舍弃
-->> 7
function b()
    return 1, 2, 3
end

t = {4, b()}    -- 4,1,2,3
print(#t)
-->> 4
t = {b(), 4}    -- 1,4
print(#t)
-->> 2
function a()
    return 1,2,3
end

function b()
    return a()
end

print(b())
-->> 1  2   3
print((a()))
-->> 1
上一篇 下一篇

猜你喜欢

热点阅读