#lua
#lua
Вопрос:
В принципе, у меня есть что-то вроде приведенного ниже.. Обратная связь от пользователя представлена в виде строки. «CONST_ME_NONE»
Есть ли какой-либо способ преобразовать «CONST_ME_NONE» в имя переменной CONST_ME_NONE?
local CONST_ME_NONE = 0
local CONST_ME_DRAWBLOOD = 17
local CONST_ME_LOSEENERGY = 24
local effects = {CONST_ME_NONE, CONST_ME_DRAWBLOOD, CONST_ME_LOSEENERGY}
local user_input = "CONST_ME_NONE"
user_input = -- do something to convert string to variable name
for i = 1, #effects do
if effects[i] == user_input then
-- do something
break
end
end
Комментарии:
1. Если это локальные переменные, почему бы вместо них не использовать таблицу значений, привязанную к этим строкам, для хранения значений?
2. @Nifim Я предполагаю, что ответ на мой вопрос «не будь ленивым» lmao, я просто действительно не хотел делать таблицу слишком большой, поскольку там около 200 локальных файлов — но просто для ясности, ты это имеешь в виду?
local effects = { "CONST_ME_NONE" = CONST_ME_NONE, "CONST_ME_DRAWBLOOD" = CONST_ME_DRAWBLOOD, "CONST_ME_LOSEENERGY" = CONST_ME_LOSEENERGY }
3. ответ Лютера — это то, что я имел в виду. это для того, чтобы «правильно» обрабатывать подобные вещи.
Ответ №1:
Поскольку имена, с которыми вы работаете, должны соответствовать вводимым пользователем данным, а ключи таблицы могут быть строками, будет намного проще использовать эти имена в качестве ключей таблицы, а не переменных.
local effects = {
CONST_ME_NONE = 0,
CONST_ME_DRAWBLOOD = 17,
CONST_ME_LOSEENERGY = 24,
}
local user_input = "CONST_ME_NONE"
if effects[user_input] ~= nil then
-- do something
end
Ответ №2:
вы можете преобразовать строку с именем переменной в реальную переменную с помощью load()
:
load("return string")
пример:
print(variable)
eh равно:
print(load("return variable")())
в вашем случае вместо
if effects[i] == user_input then
используйте:
if effects[i] == load("return user_input")() then
вы также можете проверить, работает ли метод с print:
print(load("return user_input")())
Комментарии:
1. pastebin.com/raw/tMwG7mPb Я пробовал это, но он никогда не находит значение при использовании,
load(user_input)
если я используюload(user_input)()
, я получаю ошибкуinput:11: attempt to call a nil value
2. @Xikini извините, я забыл
return
xD, теперь это правильно!3. Я чувствую себя дураком, поскольку понятия не имею, почему это не работает. xD Я тестирую это здесь lua.org/cgi-bin/demo , но
print(load("return user_input")())
возвращаетnil
4. @Xikini pastebin.com/raw/yFWsBqpQ у меня это работает, попробуйте удалить
local