lua函数无返回值和返回nil的区别

之前一直以为函数不写return就是默认返回nil,然而实际上是有区别的。

测试代码如下:

function FuncNoReturn()
end

function FuncReturnNil()
    return nil
end

local b = FuncReturnNil()
local a = FuncNoReturn()


local t = {}
table.insert(t,FuncReturnNil())
table.insert(t,FuncNoReturn())

很明显a和b的值都是nil,而第二个insert会报错:“wrong number of arguments to insert”。错误的参数数量。

原因在于,函数return时会把值压入栈,如果函数调用作为右值或者函数的形参,参数会从栈上读取。而如果不return,栈上就不会有值。

所以上面的测试代码实际上等同于:

local b = nil
local a


local t = {}
table.insert(t,nil)
table.insert(t)

而我们知道,local a的默认值是nil。这里跟将b赋值为nil是不一样的。

而两个insert调用,第一个形参数是2,即使插入的值是nil也没有问题,只是t依然是空表而已。但第二个的形参不满,所以会直接报错了。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值