概述
文章目录
- 仅有函数的情况
- 与变量混合的情况
- 结论
- 一个附带的测试
我们知道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中多变量赋值使用多返回函数时,函数返回值的展开规则所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复