2016-12-25 4 views
2

Ich habe ein Problem mit mehrdimensionalen Tabellen (Arrays?) Auf Lua. Ich habe eine, die etwa wie folgt aussieht:Lua mehrdimensionalen Tisch Anruf

arr = 
{ 
    "stats" = { 
     "23" = { 
       "1" = { 
        "account_id" = "10", 
        "info" = { 
          "name" = "john" 
          } 
         } 
       } 
      } 
} 

und wenn ich versuche, ein paar Informationen zuzugreifen unter Verwendung von wie:

local entry = "23" 
print(arr['stats'][entry]['1']) 

oder

print(arr['stats'][entry]['1']['info']['name']) 

I Null-Werte zu erhalten, ist das Mischen Saiten mit Variablen beim Aufrufen von Tabellen sogar erlaubt? irgendeine Idee, was ich falsch mache?

+3

Das zweite Beispiel hilft druckt "john", nachdem die Syntax in der Definition von 'are' festgelegt wurde.' ["stats"] = 'etc. – lhf

+0

Die Daten sind das Ergebnis eines unserialisierten Klartext-Arrays und warum benutzt man so etwas wie: – user572420

+0

* Die Daten sind das Ergebnis eines unserialisierten Nur-Text-Arrays. Warum benutzt man so etwas wie: print (symbol (arr ['stats'] [entry])) was mir einen Nullwert gibt? – user572420

Antwort

1

Es scheint, dass lua

akzeptiert keine Dinge wie

arr = { "string" = "value"} 
so, entweder Sie tun

arr = { string = "value"} 

oder Sie tun

arr = {["string"] = value} 

Auf diese Weise muss der Tabelle neu geschrieben werden wie dies, um auf lua 5.3 Interpreter zu laufen:

arr = 
{ 
    stats = 
    { 
     ["23"] = 
     { 
     ["1"] = 
     { 
      account_id = "10", 
      info = 
      { 
      name = "john" 
      } 
     } 
     } 
    } 
} 

dies zu tun, Ihre Linie

print(arr['stats'][entry]['1']['info']['name']) 

läuft gut.

Es ist auch nicht gut, Klammern zu verwenden, wenn Sie einen Punkt verwenden können. Es ist nicht, dass Ihr Skript nicht anders laufen wird, aber der Code wird viel besser lesbar und leichter zu debuggen, wenn Sie diese Zeile wie diese wirten:

print(arr.stats[entry]['1'].info.name) 

Hoffnung, dass ...

+1

hat Lua jemals erlaubt, eine Zeichenfolge als Feldname ohne Klammern zu haben? – Piglet

+0

Ich erinnere mich daran, das in Lua 5.1 zu tun, aber ich kann mich irren. –

+1

Sie haben sich geirrt, Lua hat String-Literal niemals als Schlüssel zugelassen, ohne es zuerst einzuklammern. – greatwolf