为什么我们需要用双引号来调用全局变量_G的索引?
why we need to use double quotes to call the index of the global variable _G?
我意识到当我尝试使用_G
变量来分析全局变量时,我需要在索引中使用双引号来查找变量,例如:
无效:
varname = 5
print(_G[varname]) -- nil
但这行得通:
varname = 5
print(_G["varname"]) -- 5
为什么需要这些引用?它是否将 table _G
中的变量存储为 "varname" = varname
?
以下是当您 运行 您提供的代码(不带引号)时发生的情况:
varname = 5
print(_G[varname]) --> << varname >> resolves to << 5 >>
变为:
varname = 5
print(_G[5]) --> _G[5] resolves to << nil >> because there is no such key << 5 >> in the global table
变为:
varname = 5
print(nil) --> Prints << nil >> because it is, nil.
如您所见,您正在访问 _G[varname]
。 varname
是一个 identifier
(变量名),它被计算为 整数值 5.
当您使用引号时,"varname"
是一个 string
,不再是标识符,它被评估为 字符串值“varname”。
_G["varname"]
相当于写_G.varname
,在这段代码中定义:
varname = 5
print(_G["varname"])
相当于:
varname = 5
print(_G.varname)
在这种情况下,相当于:
varname = 5
print(varname)
变成:
varname = 5
print(5)
这里的规则是table['identifier_string']
可以写成table.identifier_string
,因为identifier_string
是有效的variable-name。如果你想用 space 的字符串索引 table 例如:table['hello world']
,那么你可以 not 使用等价的符号; table.hello world
无效。
我意识到当我尝试使用_G
变量来分析全局变量时,我需要在索引中使用双引号来查找变量,例如:
无效:
varname = 5
print(_G[varname]) -- nil
但这行得通:
varname = 5
print(_G["varname"]) -- 5
为什么需要这些引用?它是否将 table _G
中的变量存储为 "varname" = varname
?
以下是当您 运行 您提供的代码(不带引号)时发生的情况:
varname = 5
print(_G[varname]) --> << varname >> resolves to << 5 >>
变为:
varname = 5
print(_G[5]) --> _G[5] resolves to << nil >> because there is no such key << 5 >> in the global table
变为:
varname = 5
print(nil) --> Prints << nil >> because it is, nil.
如您所见,您正在访问 _G[varname]
。 varname
是一个 identifier
(变量名),它被计算为 整数值 5.
当您使用引号时,"varname"
是一个 string
,不再是标识符,它被评估为 字符串值“varname”。
_G["varname"]
相当于写_G.varname
,在这段代码中定义:
varname = 5
print(_G["varname"])
相当于:
varname = 5
print(_G.varname)
在这种情况下,相当于:
varname = 5
print(varname)
变成:
varname = 5
print(5)
这里的规则是table['identifier_string']
可以写成table.identifier_string
,因为identifier_string
是有效的variable-name。如果你想用 space 的字符串索引 table 例如:table['hello world']
,那么你可以 not 使用等价的符号; table.hello world
无效。