“GlobalScope”类定义了许多基本枚举,如Error枚举。
我正在尝试在发生错误时生成有意义的日志。但是打印一个 type 的值Error只会打印整数,这不是很有帮助。
关于枚举的 Godot 文档表明查找值应该像时尚一样在字典中工作。但是,尝试通过以下方式访问Error[error_value]错误:
The identifier "Error" isn't declared in the current scope.
Run Code Online (Sandbox Code Playgroud)
如何将此类枚举值转换为字符串?
在您引用的文档中,它解释了枚举基本上只是创建一堆常量:
Run Code Online (Sandbox Code Playgroud)enum {TILE_BRICK, TILE_FLOOR, TILE_SPIKE, TILE_TELEPORT} # Is the same as: const TILE_BRICK = 0 const TILE_FLOOR = 1 const TILE_SPIKE = 2 const TILE_TELEPORT = 3
然而,这些常量的标识符名称的存在只是为了让人们更容易阅读代码。它们在运行时被机器可以使用的东西替换,并且以后将无法访问。如果我想打印标识符的名称,我必须手动执行:
# Manually print TILE_FLOOR's name as a string, then its value.
print("The value of TILE_FLOOR is ", TILE_FLOOR)
Run Code Online (Sandbox Code Playgroud)
因此,如果您的目标是获得描述性错误输出,您应该以类似的方式执行此操作,也许像这样:
if unexpected_bug_found:
# Manually print the error description, then actually return the value.
print("ERR_BUG: There was a unexpected bug!")
return ERR_BUG
Run Code Online (Sandbox Code Playgroud)
现在与字典的关系是字典可以像枚举一样起作用,而不是相反。枚举仅限于带有整数赋值的标识符列表,字典也可以这样做。但它们还可以做其他很酷的事情,比如拥有字符串标识符,我相信您可能已经想到了:
const MyDict = {
NORMAL_KEY = 0,
'STRING_KEY' : 1, # uses a colon instead of equals sign
}
func _ready():
print("MyDict.NORMAL_KEY is ", MyDict.NORMAL_KEY) # valid
print("MyDict.STRING_KEY is ", MyDict.STRING_KEY) # valid
print("MyDict[NORMAL_KEY] is ", MyDict[NORMAL_KEY]) # INVALID
print("MyDict['STRING_KEY'] is ", MyDict['STRING_KEY']) # valid
# Dictionary['KEY'] only works if the key is a string.
Run Code Online (Sandbox Code Playgroud)
这以它自己的方式很有用,但即使在这种情况下,我们也假设手头已经有与标识符名称显式匹配的字符串,这意味着我们也可以像第一个示例一样手动打印该字符串。