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

时间:2017-06-02 12:44:07

标签: printing types lua

我和Lua搞乱了几天,我发现了一些让我三思而后行的事情。 我还没有阅读参考手册Lua 5.3,因为它似乎很复杂,我很快就会检查它。

在lua 5.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?

1 个答案:

答案 0 :(得分:6)

从函数返回任何内容与返回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;什么也没有回报。它也不会打印空格,但在打印完所有值后会添加换行符,因此您可能会在第一个示例中看到三行。