Menu
CoddyTech

使用变量进行匹配

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

在匹配语句这一课中,每个模式都是字面值,比如 1: 或 "bow":。模式也可以是常量或变量:match 会将值与运行该行代码时这个名称所代表的值进行比较:

const SECRET := 42
var guess := 42
match guess:
	SECRET:
		print("You found it!")
	_:
		print("Try again")
You found it!

第二种新模式是绑定模式:var 后面跟一个新名称。和 _ 一样,它可以匹配任何值,还会把该值存储到新变量中,你可以在它所在的代码块中使用这个变量:

var level := 5
match level:
	1:
		print("Tutorial")
	var n:
		print("Level %d is locked" % n)
Level 5 is locked

当你匹配一个表达式的结果时,绑定模式最有用,因为表达式本身没有名称:

var roll_a := 4
var roll_b := 6
match roll_a + roll_b:
	12:
		print("Double six!")
	var total:
		print("You rolled ", total)
You rolled 10

绑定模式可以匹配所有内容,因此要放在最后,就像 _ 一样。它的名称必须是新的:在第二个示例中使用 var level: 会导致错误,因为 level 已经存在。它也不能与其他用逗号分隔的模式写在同一行。

match 会严格比较类型:字符串 "5" 与模式 5 不匹配,浮点数 5.0 也不匹配。先用 int() 将从输入中读取的文本转换为整数,再将它与数字进行匹配。

challenge icon

挑战

简单

编写一个数字猜测检查程序。常量 SECRET 保存秘密数字,程序将玩家猜测的数字读取为整数并存入 guess。

针对 guess 编写一个 match 语句,包含三个模式:

  • 常量 SECRET:打印 Correct!
  • 0:打印 You gave up.
  • 对其他任何猜测都匹配的绑定模式:打印猜测的数字,后面跟着 is not the number.

输入 17 时,输出为:

17 is not the number.

亲手试试

extends Node

func _ready():
	const SECRET := 42
	var guess := int(OS.read_string_from_stdin())
	# 在下方编写 match 语句
quiz icon自我测试

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

逻辑与流程中的所有课

自己练习: GDScript 在线编译器