为啥我的代码只打印 nil 一次?

Posted

技术标签:

【中文标题】为啥我的代码只打印 nil 一次?【英文标题】:Why does my code only print nil once?为什么我的代码只打印 nil 一次? 【发布时间】:2015-10-09 16:52:17 【问题描述】:

修复起来超级容易;只需将其设为return nil,但为什么没有该行我的代码无法工作?

function x(bool)
    if bool then
        return "!"
    end
end

print(x(true), x(false), x(false))

更令人困惑的是,它总是打印 nil,就像我调用 x(false) 减 1 的次数一样。

我似乎无法理解为什么会发生这种情况。

【问题讨论】:

函数调用BEFORE COMMA返回的值个数调整为1,最后一次调用的值个数不调整。所以,你打印了1+1+0 【参考方案1】:

The manual 说:

如果控制到达函数的末尾而没有遇到return 语句,则函数返回没有结果。

请注意,不返回结果与返回nil 不同。


在本次通话中:

print(x(true), x(false), x(false))

x(false) 均不返回任何内容,但是,除了最后一个元素之外的所有元素始终调整为一个结果。

通常我们看到返回一个或多个结果的函数调用只剩下第一个。这里 no result 也填充了nil

【讨论】:

我不明白为什么它不只是打印“!”然后?为什么不是 2 nil? @warspyking,正如@YuHao 所说,最后一个函数没有打印nil,因为它没有返回nil(它什么都不返回)。倒数第二个函数的结果显示为nil,因为即使它什么都不返回(与最后一个函数相同),结果也会调整nil以保持正确的数量结果。将此更改为x(true), x(false), 1;你希望结果是"!", nil, 1 而不是"!", 1,对吧? @Paul 我想这是真的,但如果它想“保持正确的结果数量”,为什么最后一个不调整? 因为在这种情况下没有区别,但倒数第二个确实有区别。

以上是关于为啥我的代码只打印 nil 一次?的主要内容,如果未能解决你的问题,请参考以下文章

Java Arrays 帮助:为啥我的代码打印 0? [关闭]

为啥这段代码不打印我的数组?

为啥此代码会根据缩进打印出不同的内容?

Core Data 的 Save 方法第一次调用“nil” - 为啥?

为啥当我为 C++ 代码打印字符时,我的终端会发出哔声?

为啥我的信号量程序打印 20 秒而不是 10 秒?