2016-12-25 4 views
2

У меня, похоже, проблема с многомерными таблицами (массивами?) На Lua. У меня есть один, который выглядит примерно так:Lua многомерный вызов таблицы

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

и всякий раз, когда я пытаюсь получить доступ к некоторой информации, используя как:

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

или

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

Я получаю нулевые значения, перемешивает строки с переменными при разрешении вызова таблиц? любая идея, что я делаю неправильно?

+3

Второй пример prints 'john', после определения синтаксиса в определении' are' использовать '[" stats "] =' и т. д. – lhf

+0

данные являются результатом несериализованного массива обычного текста и почему используется что-то вроде: – user572420

+0

* Данные являются результатом несериализованного массива обычного текста. Почему используется что-то вроде: print (tostring (arr ['stats'] [entry])), давая мне нулевое значение? – user572420

ответ

1

Кажется, что Lua не принимает вещи, как

arr = { "string" = "value"} 

так, как вы

arr = { string = "value"} 

или вы

arr = {["string"] = value} 

Таким образом, ваша таблица должна быть переписана как это, для того, чтобы работать на интерпретаторе lua 5.3:

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

делает это, ваша линия

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

работает отлично.

Также не рекомендуется использовать скобки, когда вы можете использовать точку. Это не то, что ваш скрипт не будет работать иначе, но код становится намного более разборчивыми и проще отлаживать, если вы wirte эту строку так:

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

Надежда, которая помогает ...

+1

сделал Lua когда-либо позволять иметь строку как имя поля без скобок? – Piglet

+0

Я помню, как это делал в Lua 5.1, но я могу ошибаться. –

+1

Вы ошибаетесь, Lua никогда не разрешал строковый литерал как ключ без брекетинга сначала. – greatwolf

Смежные вопросы