2017-06-02 6 views
3

Ich habe ein paar Tage mit Lua verbracht und ich habe einige Dinge herausgefunden, die mich zweimal zum Nachdenken gebracht haben. Ich habe das Referenzhandbuch Lua 5.3 noch nicht gelesen, weil es kompliziert zu sein scheint, werde ich bald darauf überprüfen.Warum funktioniert Drucken() nicht wie Drucken (Typ (2)) in Lua?

Ok in lua 5.3, wissen wir print() gibt nil zurück und druckt ein Leerzeichen.

>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

drucken zurück nichts. Also ist 'print (print())' gleich 'print() print()' – moteus

Antwort

6

nichts Rückkehr von einer Funktion ist nicht die gleiche wie nil zurück. Die Ergebnisse können verwirrend sein, da die meiste Zeit, in der nichts zurückgegeben wird, ähnlich der Rückgabe nil interpretiert wird, aber im Fall von print wird nil nicht gedruckt, da nichts zurückgegeben wird.

Sie können den Unterschied mit den folgenden Beispielen sehen:

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

Im ersten Fall ist die Anzahl der zurückgegebenen Werte 0, aber im zweiten Fall ist diese Nummer 1, also wenn sie gedruckt wird, wird es zeigen nil wie Sie erwarten.

wir wissen, print() gibt nil zurück und druckt ein Leerzeichen.

Dies ist in beiden Fällen falsch: print() gibt nicht zurück nil; es gibt nichts zurück. Es druckt auch kein Leerzeichen, aber es fügt einen Zeilenumbruch hinzu, nachdem alle seine Werte gedruckt sind, so dass Sie wahrscheinlich drei Zeilen in Ihrem ersten Beispiel gedruckt sehen.