Die offizielle Dokumentation beschreibt es#wie folgt: Der Längenoperator wird als unärer Operator # geschrieben. Die Länge einer Zeichenkette ist ihre Anzahl an Bytes (das heißt, die Länge einer Zeichenkette, berechnet als ein Byte pro Zeichen).

Die Länge einer Tabelle t ist definiert als ein ganzzahliger Index n. Dabei gilt, dass t[n] nicht nil ist und t[n+1] nil ist; außerdem, wenn t

local tblTest2 =
{
    1,
    a = 2,
    3,
}

print(table.getn(tblTest2))

Was ist die Ausgabe dieses Codes? Die Ausgabe hier sollte2sein. Zuerst musst du verstehen, dass dieses ctblTest2c keine einfache ctable ist; es mischt zwei Stile: Liste und Record. In der Tabelle ista = 2es im Record-Stil. Zweitens musst du verstehen, dass ein Record im Record-Stil nicht bei der Längenberechnung der äußeren Tabelle mitgezählt wird. Du kannst es dir als Funktion vorstellen; genau wie in anderen objektorientierten Sprachen werden Funktionen nicht als interne Variablen erfasst.

Da es wie eine Funktion ist, kannst du den Wert von a ausgeben, ja.print(tblTest2.a)Das ist alles.

Sieh dir nun den folgenden Code an:

local tblTest3 =
{
    1,
    {a = 2},
    3,
}

print(table.getn(tblTest3))

Was ist die Ausgabe dieses Codes? Die Ausgabe hier sollte3sein. Beachte, dass eine in einer Tabelle verschachtelte Tabelle ebenfalls ein Element ist. Daher ist die Ausgabe3。

table.getn(t)ist äquivalent zu#t。

Der folgende Fall ist ziemlich verwirrend; du kannst direkt die Zusammenfassung im letzten Satz lesen:

Schauen wir uns nun einen ziemlich verwirrenden an:

local tblTest4 =
{
    1,
    nil,
}

print(table.getn(tblTest4))

Was ist die Ausgabe dieses Codes? Sie ist 1. Wir alle wissen, dass eine Tabelle, wenn sie ihre Länge ermittelt, die gesamte Tabelle durchläuft und beim letzten Nicht-nil-Wert zurückkehrt.

Aber was ist mit dem folgenden Code?

local tblTest5 =
{
    1,
    nil,
    2,
}

print(table.getn(tblTest5))

Es gibt 3 aus. Lustig, oder? Es zählt nil als Element bei der Längenberechnung. Aber das, was dich wirklich verblüfft, ist der folgende Code:

local tblTest5 =
{
    1,
    nil,
    2,
    nil
}

Es gibt 1 aus. Hier ist ein weiteres Snippet, um Sie völlig zu verwirren:

local tblTest5 =
{
    1,
    nil,
    2,
    nil,
    3,
    nil
}

Es gibt 3 aus. Verwirrt? Schauen Sie noch einmal; dieser Abschnitt wird dafür sorgen, dass Sie von nun an niemals wagen werden, nil-Werte in eine Tabelle zu schreiben:

local tblTest5 =
{
    1,
    nil,
    2,
    nil,
    3,
    nil,
    4,
    nil
}

Schauen Sie sich das an, die Ausgabe dieses Abschnitts ist 1. Liebe Leserin, lieber Leser, wagen Sie es auch weiterhin, nil-Werte in Lua-Tabellen zu verwenden??? Wenn Sie danach weiterhin nil hinzufügen, könnten Sie etwas entdecken. Sie denken vielleicht, Sie hätten ein Muster gefunden. Aber Sie dürfen niemals denken, dass dies ein Muster ist. Denn es ist falsch.

  • 1. Verwenden Sie kein nil in Tabellen.
  • 2. Wenn Sie wirklich nil verwenden müssen, müssen Sie die Funktion table.setn() verwenden, um die Länge der Tabelle festzulegen. Hinweis: Neuere Versionen von Lua unterstützen setn nicht mehr.

Wir müssen Ihnen eine Schlussfolgerung geben:Die Funktion setn ist veraltet. Verwenden Sie keine nil-Werte in Lua-Tabellen. Wenn ein Element gelöscht werden muss, entfernen Sie es einfach; ersetzen Sie es nicht durch nil.

Quelle: http://www.cnblogs.com/youxin/p/3799339.html