Indexing 为什么我们需要使用双引号来调用全局变量的索引?

Indexing 为什么我们需要使用双引号来调用全局变量的索引?,indexing,lua,global,lua-table,Indexing,Lua,Global,Lua Table,我意识到,当我尝试使用\u G变量来分析全局变量时,我需要在索引中使用双引号来查找变量,例如: 它不起作用: varname=5 打印(_G[varname])--nil 但这是可行的: varname=5 打印(_G[“varname”])--5 为什么这些引用是必要的?它是否将变量存储在表\u G中,作为“varname”=varname?以下是运行您提供的代码时发生的情况,不带引号: varname=5 打印(_G[varname])-->>解析为> 变成: varname=5 pr

我意识到,当我尝试使用
\u G
变量来分析全局变量时,我需要在索引中使用双引号来查找变量,例如:

它不起作用:

varname=5
打印(_G[varname])--nil
但这是可行的:

varname=5
打印(_G[“varname”])--5

为什么这些引用是必要的?它是否将变量存储在表
\u G
中,作为
“varname”=varname

以下是运行您提供的代码时发生的情况,不带引号:

varname=5
打印(_G[varname])-->>解析为>
变成:

varname=5
print(_G[5])-->_G[5]解析为>,因为全局表中没有这样的键>
变成:

varname=5
打印(nil)-->打印>因为它是,nil。
如您所见,您正在访问
\u G[varname]
varname
是一个
标识符
(一个变量名),其计算结果为整数值5

使用引号时,
“varname”
是一个
字符串,不再是标识符,而是作为字符串值“varname”计算

\u G[“varname”]
相当于编写
\u G.varname
,该代码定义如下:

varname=5
打印(_G[“varname”])
相当于:

varname=5
打印(_G.varname)
在这种情况下,相当于:

varname=5
打印(varname)
即:

varname=5
印刷品(5)

这里的规则是
表['identifier\u string']
可以写入
表。identifier\u string
,因为
identifier\u string
是有效的变量名。如果您想使用具有空格的字符串索引表,例如:
table['hello world']
,则不能使用等效的表示法
table.hello world
无效。

\u G[i]
是在
i=5
@EgorSkriptunoff时获取
\u G[5]
所需的。对不起,我不明白您的意思。我知道如何使用
\u G
变量声明和收集值,但我不明白的是,为什么从变量中收集值时需要在索引中使用双引号,因为在第一个示例中它不起作用,但在第二个示例中它对表起作用:
t={varname=5,1}
。当您调用
t[1]
时,它将返回1,
t[“varname”]
t.varname
将返回5。