Lua字符串转变量及反向转换问题求助:代码逻辑无法实现
Hey,看你的代码,应该是想在循环里动态切换处理group1、group2这类变量,结果卡在字符串和变量的互相转换上了对吧?我来帮你捋清楚问题,给你几个可行的解决思路。
首先先把你的代码贴出来,方便咱们一起分析:
return function() local handle = get.handle local group1 = handle('group 1') -- 返回group 1的名称标签 local group2 = handle('group 2') for i=1,6 do local groupx = group1 -- 想转成groupx来动态对应group2等变量,但这里只是复制了group1的值 -- 对group1执行一些处理 -- local groupx = string.sub(groupx, 6) print(groupx) -- 输出数字1 local groupx = groupx +1 print(groupx) -- 输出数字2.0 local groupx = string.format("%.f",groupx) fdb(groupx) -- 输出数字 end end
问题核心
你现在的写法里,groupx只是把group1的值拷贝了一份,根本没法动态关联到group2、group3这些变量。而且Lua里局部变量是没办法通过字符串直接访问的——因为局部变量存在函数的闭包环境里,不在全局表_G中,所以你没法用类似_G['group'..i]这种方式去拿局部变量。
解决办法
最靠谱的方式是用**表(table)**来管理这些group变量,这样就能通过索引动态获取了:
方案1:用数组表存储group
如果你的group是按顺序来的(group1到group6),直接用数组表最方便:
return function() local handle = get.handle -- 把所有group存入数组,索引对应数字1-6 local groups = { handle('group 1'), handle('group 2'), handle('group 3'), handle('group 4'), handle('group 5'), handle('group 6') } for i=1,6 do -- 动态获取对应的group local current_group = groups[i] -- 这里做你需要的处理,比如提取数字部分(假设current_group是字符串"group x") local group_num = tonumber(string.sub(current_group, 7)) -- "group "是6个字符,从第7位开始取数字 print(group_num) -- 输出1、2、3...6 group_num = group_num + 1 print(group_num) -- 输出2、3...7 local num_str = string.format("%.f", group_num) fdb(num_str) end end
方案2:用键值对表存储(如果group命名不规律)
如果你的group名称不是严格按数字排序,或者需要用字符串索引,就用键值对:
return function() local handle = get.handle local groups = { group1 = handle('group 1'), group2 = handle('group 2'), -- 其他group继续添加 } for i=1,6 do -- 通过字符串拼接生成键名,拿到对应的group local current_group = groups['group'..i] -- 后续处理和上面一样 local group_num = tonumber(string.sub(current_group, 7)) -- ... end end
顺便提下你代码里的小细节
你多次用local groupx重新定义变量,其实没必要——每次local都会创建一个新的局部变量,覆盖之前的。直接去掉重复的local就行,比如:
local groupx = group1 groupx = string.sub(groupx, 6) -- 这里不用加local
这样调整后,就能实现你想要的动态处理不同group的逻辑啦。
内容的提问来源于stack exchange,提问作者Martijn van Dam
相关产品推荐
相关产品推荐

