Как объединить строки и числа и предотвратить преобразование Lua результата в строку? - PullRequest
0 голосов
/ 23 января 2019

Подводя итог, я пытаюсь получить доступ к четвертому элементу массива (таблицы) с именем ap каждый раз, когда программа получает через сокет сообщение ap[4].

InЧтобы достичь этого, программа, как только пришло сообщение, вызывает функцию, которая «берет» символ 4 и преобразует его в число.

До сих пор всеидеально, но когда я пытаюсь снова объединить число 4 между ap[ и ], Lua снова преобразует все в строку.Я знаю, что это типичное поведение Луа, но я ДЕЙСТВИТЕЛЬНО не могу найти способ решить эту проблему.

Надеюсь, вы поможете мне.Спасибо.

--Have this:
message = "ap[4]"

--Want this:
valueMessage = ap[4]

Ответы [ 2 ]

0 голосов
/ 23 января 2019
name="ap"; idx=4; value=_G[name][idx]
0 голосов
/ 23 января 2019

Вместо преобразования ap[4] в число вы можете использовать loadstring для его выполнения.

Пример:

ap = {[4] = 'Hello World'}
message = "ap[4]"
get_valueMessage = loadstring("return " .. message)

print(get_valueMessage())

Этот метод обеспечивает гибкость при работе с таблицами переменной глубины,Если ваша работа с таблицами с одинаковой глубиной, то ответ Егора Скриптунофа является лучшим решением

Таблица должна быть глобальной, чтобы функция loadstring могла получить к ней доступ.

Что следует иметь в виду, оэтот метод, он также предлагает путь внедрения для вредоносного кода, поскольку он выполняет сообщение.Если сообщение содержит что-то иное, чем индекс таблицы, такой как вызов функции, его можно использовать.return, добавленное к сообщению, смягчает некоторые из махинаций.

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