如何将字符串转换为变量名?

基本上我有以下内容…… 用户反馈以字符串的形式提供。"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 = -- 进行某种转换字符串到变量名的操作

for i = 1, #effects do
    if effects[i] == user_input then
        -- 进行某些操作
        break
    end
end
点赞
用户12568711
用户12568711

你可以使用 load() 将一个带有变量名的字符串转换为实际变量:

load("return string")

例如:

print(variable)

等价于:

print(load("return variable")())

对于你的情况,替换:

if effects[i] == user_input then

使用:

if effects[i] == load("return user_input")() then

你也可以用 print 检查这个方法是否可行:

print(load("return user_input")())
2020-08-21 18:38:11
用户3574628
用户3574628

由于你正在处理的名称必须与用户输入匹配,并且表键可以是字符串, 因此使用这些名称作为表键而不是变量将更容易。

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
2020-08-21 20:28:23