美文网首页Lua教程
Lua极简入门(六)——函数多返回值

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

作者: 李小磊_0867 | 来源:发表于2019-10-24 18:45 被阅读0次

    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()
    -->>
    
    • 函数没有返回值,或返回值不足时,Lua会使用nil进行补足,当表达式变量与函数返回相同时,完全接收
    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
    
    • 当在一个函数中调用另外一个函数时a(b()),当ba的最后一个参数时,将b的所有返回值全部传入到函数a
    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
    
    • 当声明table时,调用函数,同表达式调用类似,如果函数是最后一个元素,则返回全部值,如果不是最后一个,则只返回一个值
    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
    
    • 当使用return语句后调用函数时,将返回函数的所有值;如果使用()标记函数时,则只返回第一个值
    function a()
        return 1,2,3
    end
    
    function b()
        return a()
    end
    
    print(b())
    -->> 1  2   3
    print((a()))
    -->> 1
    

    相关文章

      网友评论

        本文标题:Lua极简入门(六)——函数多返回值

        本文链接:https://www.haomeiwen.com/subject/sjbdvctx.html