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。