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

Printing 为什么print(print())不像Lua中的print(type(2))那样工作?,printing,types,lua,Printing,Types,Lua,我和Lua交往了几天,我发现了一些让我三思而后行的事情我还没有阅读参考手册Lua 5.3,因为它看起来很复杂,我将很快检查它 在Lua5.3中,我们知道print()返回nil并打印一个空格。 >print(print(print())) --this prints three spaces --but print() returns nil so print(nil) should

我和Lua交往了几天,我发现了一些让我三思而后行的事情我还没有阅读参考手册Lua 5.3,因为它看起来很复杂,我将很快检查它

在Lua5.3中,我们知道print()返回nil并打印一个空格。

>print(print(print()))

                        --this prints three spaces 
                        --but print() returns nil so print(nil) should
                        --print nil. But instead it is printing 3 spaces


>print(type(2))  
number                  --this prints a number since type(2) returns a 
                        --number , but this doesn't work with print(print()) 
                        --why?

从函数中不返回任何内容与返回
nil
不同。结果可能会令人困惑,因为大多数情况下,不返回任何内容的解释类似于返回
nil
,但在
print
的情况下,它不会打印
nil
,因为不返回任何内容

您可以通过以下示例看到不同之处:

print(select('#', (function() return end)())) -- prints 0
print(select('#', (function() return nil end)())) -- prints 1
在第一种情况下,返回值的数目是0,但在第二种情况下,该数目是1,因此在打印时,它将如您所期望的那样显示
nil

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


这两种计数都不正确:
print()
不返回
nil
;它什么也不返回。它也不打印空格,但在打印完所有值后会添加一个换行符,因此您可能会在第一个示例中看到打印的三行。

print不返回任何内容。所以
print(print())
等于
print()print()