Проблемы индексации таблицы Lua между строками и целыми числами - PullRequest
0 голосов
/ 28 марта 2012

Я создал сложную таблицу таблиц и использовал переменную в качестве индексов.По какой-то причине у меня были проблемы с тем, что мой код был очень глючным.

Оказалось, что мне нужно преобразовать индекс в строки

Так что

myTable[index] 

нужно сделать

myTable[tostring(index)]

else

Иногда индекс работал бы как строка, а иногда - как целое число (хотя я никогда не конвертировал индекс в строку в какой-либо точке кода.

Это вызвало проблемы, потому что myTable[1] и myTable["1"] были бы созданы, и оба были бы разными (и я перебирал пары k / v, и поэтому myTable[1] не появлялся).

Это очень странное поведение, но я предполагаю, что ожидается? Есть ли способ создать новый тип, основанный на таблице, которая всегда использует строковые индексы, чтобы можно было избежать этой вещи?

1 Ответ

6 голосов
/ 28 марта 2012

Lua автоматически вводит строки и числа в зависимости от контекста, в котором они используются (см. руководство и эту вики-страницу ).

Кажется, что где-то по пути вы читаете индекс либо из файла, либо используете оператор конкатенации строк .., и он становится строкой. Мне кажется, что вы хотите использовать только числовые индексы.

Чтобы убедиться, что index остается числом, используйте tonumber() после любой обработки или чтения из файла - index = tonumber(index). В представлении таблицы Lua 1 и "1" - это разные ключи.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...