为什么在Lua中print(print())不能像print(type(2))那样工作?

我已经乱搞了几天Lua,发现了一些让我反思的事情。我还没有阅读参考手册Lua 5.3,因为它似乎太复杂了,我很快会查看它。

好的,在lua 5.3中,我们知道print()返回_nil_并打印一个空格。

>printprintprint()))

                        --这打印三个空格
                        --但print()返回nil,所以print(nil)应该
                        --打印nil,但它却打印了3个空格

>printtype2))
number                  --这打印一个数字,因为type(2)返回
                        --一个数字,但这不能用于print(print())
                        --为什么?
点赞
用户1442917
用户1442917

从一个函数中返回空值并不等同于返回 nil。由于大多数情况下返回空值被解释为返回 nil,所以结果可能会令人困惑,但在 print 的情况下,它不会打印出 nil,因为没有返回值。

你可以通过以下示例看到它们的区别:

print(select('#', (function() return end)())) -- 打印 0
print(select('#', (function() return nil end)())) -- 打印 1

在第一个示例中,返回的值数量为0,但在第二个示例中,这个数量为1,所以当打印出来时,会显示 nil,正如你所期望的那样。

我们知道 print() 返回 nil 并打印一个空格。

这是不正确的: print() 并不返回 nil; 它返回空值。 它也不打印一个空格,而是在所有值都被打印后添加一个换行符,所以你可能在第一个示例中看到了三行打印出来的。

2017-06-02 15:38:53