美文网首页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极简入门(六)——函数多返回值

    Java、C#之类的都不允许返回多个值,而Python、Go等允许返回多个值,这极大的方便了自定义函数时,扩展更多...

  • Lua极简入门(六)——函数

    在完成一些编码工作时,总会有一些相似或者重复的工作。比如在结算工资时,员工的工资不同,但缴纳税、社保等计算是一个相...

  • Lua极简入门(六)——函数定义

    对于Lua,定义个函数,非常简单。只需要使用function语句,接下来需要明确函数名、括号,参数列表,最后以en...

  • Lua极简入门(六)——函数的参数

    函数定义完成后,那么函数的调用方式,完成的功能,以及返回值都将固定。此时就剩下调用了,对于调用函数,只需要关注参数...

  • lua入门笔记 目录

    lua的中文API lua入门笔记1 类型 表达式 语句 函数lua入门笔记2 深入函数 深入函数 迭代器与泛型f...

  • Lua极简入门(七)——函数高级特性

    在Lua中函数和其他类型的值具有相同权利,如函数和数值、字符串等具有相同地位。因此函数也可以像其他类型一样存储到变...

  • 五 函数(function)

    函数的声明格式 多返回值 在lua中允许函数返回多个结果,返回方式形如return a,b,其中a,b参数不可用(...

  • Lua学习笔记1

    1.函数返回值丢失 在lua中,函数可以有多个返回值 function foo() return 1,2endp...

  • Lua函数(function)语法与库函数 --math 表

    -->函数 -->1.无参无返回值 -->函数的定义-- function Say()-- print("lua...

  • Lua极简入门(五)——循环

    在编写代码的过程中,总有许多迭代的代码需求,如计算从1连加到10的计算,如果数字足够大,使用表达式计算的方法,将无...

网友评论

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

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