2017-06-02 15 views
3

私は数日間Luaを混乱させてきました。私は2度思ういくつかのことを考え出しました。 リファレンスマニュアルLua 5.3をまだ読んでいないのですが、それはが複雑に見えるので、すぐに確認します。なぜLuaでprint(print())がprint(type(2))のように動作しないのですか?

私が知っているのは、print()はで、のバックを返し、スペースを表示します。関数から何も返さない

>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? 
+4

print returns nothinng。だから 'print()()'は 'print()print()'と同じです。 – moteus

答えて

6

nilを返すと同じではありません。何も返さない時間のほとんどはnilと同様に解釈されますが、printの場合は何も返されないため、nilが出力されないため、結果が混乱する可能性があります。

あなたは、以下の実施例との違いを確認できます。返される値の数は0であるが、第二のケースでは、この数は1であるので、印刷されたとき、それが表示される最初のケースで

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

nilとお考えください。

print()はnilを返し、スペースを表示します。

これは両方のカウントで正しくありません。print()nilを返しません。それは何も返しません。また、空白は表示されませんが、すべての値が出力された後に改行が追加されるため、最初の例では3行が表示されている可能性があります。

関連する問題