2013-08-14 3 views
2

Код очень прост. Декларирование две таблицы, простой и многомерный:Невозможно объявить элемент таблицы с номером из другой таблицы

Player = {X_Pos = 1, Y_Pos = 1, Current_Sprite_Num = 100} 


    for j=1, Max_col_length do -- value ofMax_col_length doesn't matter here; positive integer anyway 

     MapLayer_B[j] = {} 

     for i=1, Max_row_length do --same here 
      MapLayer_B[j][i] = 1 
     end 
    end 

Тогда я пытаюсь сделать эту операцию:

MapLayer_B[Player[X_Pos]][Player[Y_Pos]] = Player[Current_Sprite_Num] 

Он должен заменить Player[X_Pos]-й элемент Player[Y_Pos] го rowtable в MapLayer_B. Вместо этого я получил эту ошибку с компилятором LÖVE:

  • Ошибка: попытаться проиндексировать поле '?' (Нилъ значение)

Я не получить, почему это происходит, так как все элементы обоих MapLayer_B и Player таблиц объявлены и не хранятся в ноль.

Любые идеи?

ответ

2

Вам необходимо использовать Player.X_Pos вместо Player[X_Pos] и так далее.

Скобки обозначение будет интерпретировать «x_pos» в качестве переменной и попытаться получить доступ ключ Täht вместо (причина ошибки заключается в том, что неопределенные переменные по умолчанию в нуль)

t = {a = 17} 

print(t.a) --dot notation is simpler 

print(t["a"]) --bracket notation expects a string 

key = "a" --that string can be from a variable 
print(t[key]) 
+0

О, это, казалось, общая ошибка для меня. Я думал, что в Lua 'name.element' совпадает с именем' name [element] '. Благодаря! –

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

  • Нет связанных вопросов^_^