Menu
CoddyTech

枚举值

本课属于 Coddy GDScript 学习旅程的“逻辑与流程”单元。第 39 课,共 78 课。

每个枚举选项都是一个 int,因此你可以比较选项并用它们进行计算:

enum Day { MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY }

func _ready():
	print(Day.FRIDAY) # 4
	print(Day.SATURDAY > Day.FRIDAY) # true
	print(Day.FRIDAY + 1) # 5

枚举本身的作用类似于一个从名称映射到值的字典。keys() 按顺序返回名称,values() 返回值,而 size() 返回选项的数量:

print(Day.keys()) # ["MONDAY", "TUESDAY", ..., "SUNDAY"]
print(Day.size()) # 7

要打印某个值的名称,可以用它作为索引访问 keys()。当选项的默认值为 0、1、2……时,这种方法有效。对于值经过指定的枚举,可以使用 find_key(),它会返回值的名称:

var today := Day.SATURDAY
print(Day.keys()[today]) # SATURDAY

在顶层使用 enum Coin { COPPER = 1, SILVER = 10 } 时,Coin.keys()[10] 会越界,而 find_key() 可以正常工作:

print(Coin.find_key(10)) # SILVER

反过来,要从以文本形式存储的名称获取它的值,请使用方括号。先用 has() 检查名称:不在枚举中的名称会导致错误。

var text := "FRIDAY"
if Day.has(text):
	print(Day[text]) # 4

for day_name in Day: 会像遍历字典一样遍历这些名称。

challenge icon

挑战

简单

脚本声明了枚举 Day,包含从 MONDAY 到 SUNDAY 的值。程序读取两行:一个用大写字母表示的星期名称,以及一个天数(非负整数,即 0 或更大)。

打印两行:

  1. 星期名称、has the value 和该星期在枚举中的值
  2. In、天数、days: 和经过相应天数后的星期名称

SUNDAY 之后,星期会从 MONDAY 重新开始。输入 FRIDAY 和 3 时,输出为:

FRIDAY has the value 4
In 3 days: MONDAY

亲手试试

extends Node

enum Day { MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY }

func _ready():
	var day_name := OS.read_string_from_stdin()
	var days := int(OS.read_string_from_stdin())
	# 输出当天的值,以及经过指定天数后那一天的值
	pass
quiz icon自我测试

这节课包含一个小测验。开始学习即可作答,并记录你的进度。

逻辑与流程中的所有课

自己练习: GDScript 在线编译器