Menu
CoddyTech

什么是枚举?

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

有些值只能是几个选项之一:交通灯可以是红色、黄色或绿色,玩家可以处于空闲、奔跑或跳跃状态。你可以用数字来存储这些选项,例如用 0 表示空闲,用 1 表示奔跑,但这样每个读者都得记住每个数字的含义:

var state := 1
if state == 1:
	print("Running")

enum(enumeration 的简称)会为每个选项命名。GDScript 会为这些名称自动编号,从 0 开始:

enum State { IDLE, RUN, JUMP }

现在,你可以写 State.RUN,而不是 1:枚举的名称、一个点和选项。这样代码的含义就一目了然:

var state := State.RUN
if state == State.RUN:
	print("Running")

枚举声明在脚本的顶层,与 func _ready(): 并列,而不在函数内部。函数中的 enum 行会导致错误,程序在运行前就会停止:

extends Node

enum State { IDLE, RUN, JUMP }

func _ready():
	var state := State.JUMP
	print(state) # 2

这些选项是常量,所以 State.RUN = 5 是错误的。拼错的选项(例如 State.RUNN)会在程序运行前被报告,而用错误的数字(例如用 3 代替 2)则不会被发现。

challenge icon

挑战

简单

程序会读取一个从 0 到 3 的整数,用来表示天气。用枚举为这些数字命名,并打印一条建议。

  1. 在脚本的顶层,声明一个名为 Weather 的枚举,选项依次为 SUNNY、CLOUDY、RAINY 和 SNOWY。
  2. 将 weather 与枚举选项进行比较(不要与数字比较),并打印一行内容:
  • Weather.SUNNY:Wear sunglasses
  • Weather.CLOUDY:Bring a jacket
  • Weather.RAINY:Take an umbrella
  • Weather.SNOWY:Build a snowman

输入 2 时,输出为:

Take an umbrella

亲手试试

extends Node

# 在这里声明 Weather 枚举

func _ready():
	var weather := int(OS.read_string_from_stdin())
	# 将 weather 与枚举选项比较,并输出建议
	pass
quiz icon自我测试

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

逻辑与流程中的所有课

自己练习: GDScript 在线编译器