为啥我的代码只打印 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? [关闭]