我是靠谱客的博主 神勇毛豆,最近开发中收集的这篇文章主要介绍Lua中多变量赋值使用多返回函数时,函数返回值的展开规则,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

文章目录

        • 仅有函数的情况
        • 与变量混合的情况
        • 结论
        • 一个附带的测试

我们知道Lua支持多个变量在一个语句中赋值,也支持一个函数同时返回多个值,但是这两者组合起来会怎么样呢?

多说无宜,测试开始。

仅有函数的情况

首先是我们的多返回函数add,有两个参数,固定返回1和0,然后是四个变量,bcde。

function add()
    return 1,0
end

local b,c,d,e = add(),add()

print(b) -- 1
print(c) -- 1
print(d) -- 0
print(e) -- nil

结果会发现变量e没有被赋值。
我这里特别将两个返回值设得不同,被赋值为第一个返回值的是1,第二个返回值的是0,如果所有函数都会展开,那么变量c肯定为0,但实际上是1,所以很容易知道的是,后一个add被展开了,第一个没有被展开。

与变量混合的情况

在上面的基础上,增加一个变量,把它放在第二个add后面。

a = 5
function add()
    return 1,0
end

local b,c,d,e = add(),add(),a

print(b)	-- 1
print(c)	-- 1
print(d)	-- 5
print(e)	-- nil

如果你以为第二个add的返回值还是会被展开那就错了,实际上这时候因为第二个add之后也有一个,所以它也不会被展开。

结论

当函数在赋值语句的右边时,只有在最后一个,之后的函数才会把所有的返回值展开,所有后面有,的函数的返回值都不会展开。

一个附带的测试

前面的两个函数都是有返回值的,如果说中间有一个没有返回值的函数会怎么样?
很简单,没有返回值,那不就是返回了一个nil吗?
用下面的代码很容易可以获得结果

a = 5
function add()
    return 1,0
end

function void_func()
end

local b,c,d,e = add(),void_func(),add(),a

print(b)	-- 1
print(c)	-- nil
print(d)	-- 1
print(e)	-- 5

注意到变量c了吗,它对应的返回函数正好是void_func,它获取到的值是nil。

当然最直接的测试还是这样:

f = void_func();
print(f)	-- nil

返回值是nil

最后

以上就是神勇毛豆为你收集整理的Lua中多变量赋值使用多返回函数时,函数返回值的展开规则的全部内容,希望文章能够帮你解决Lua中多变量赋值使用多返回函数时,函数返回值的展开规则所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(43)

评论列表共有 0 条评论

立即
投稿
返回
顶部