Lua中如何通过字符串拼接得到的变量名访问对应变量值
Lua 动态通过字符串名调用对应变量的实现方案
你给出的初始代码逻辑是直接打印拼接得到的字符串variable1,自然只能拿到字符串本身,拿不到同名变量存储的值,要实现需求可以按以下场景处理:
- 访问全局变量
Lua 所有全局变量都会默认存储在全局环境表_G中,你只需要把拼接得到的字符串作为键,去_G表中索引对应值即可,修改后的可运行代码如下:
variable1 = "Hello" a = "variable" .. 1 print(_G[a]) -- 运行输出:Hello
提示:Lua 5.2+ 版本也可以使用当前环境表_ENV做同样的索引,全局场景下效果和_G完全一致。
- 访问局部变量
局部变量不会被注册到全局环境表中,Lua 原生没有提供直接通过字符串名动态获取局部变量的方法,也非常不建议强行做黑魔法操作去扫栈拿值。如果有动态访问变量的需求,最好从一开始就把需要动态调用的变量统一放到同一个表中管理,参考实现:
-- 把需要动态访问的变量都存在自定义的映射表里 local varStore = { variable1 = "Hello" } local a = "variable" .. 1 print(varStore[a]) -- 运行输出:Hello
工程实践中更推荐用自定义表管理需要动态访问的变量,直接操作全局环境表容易引发命名污染、变量被意外篡改的问题,可维护性也更差。
内容的提问来源于stack exchange,提问作者illilli
相关产品推荐
相关产品推荐

