4.6 2026-01-27
match 对应其他语言的switch,不需要在每个条件下写break就可以避免重复执行
match condition:
"left":
# condition 等于left时,打印"left"
print("left")
"right":
# condition 等于right时,打印"right"
print("right")
_:
# 既不等于left也不等于right,打印"default"
print("default")
数组
match x:
[]:
print("空数组")
[1, 3, "test", null]:
print("完全一样的数组")
[var start, _, "test"]:
print("第一个元素 ", start, ", 最后一个元素是 \"test\"")
[42, ..]:
print("以42开头的数组")
字典
match x:
{}:
print("空字典")
{"name": "Dennis"}:
print("名称(name)是Dennis")
{"name": "Dennis", "age": var age}:
print("Dennis ", age, " 岁了")
{"name", "age"}:
print("字典包含name和age属性,但不是 Dennis :(")
{"key": "godotisawesome", ..}:
print("只检查一个属性,忽略其余")
匹配多模式
match x:
1, 2, 3:
print("It's 1 - 3")
"Sword", "Splash potion", "Fist":
print("哦,受到伤害")
额外匹配
match point:
[0, 0]:
print("原点")
[_, 0]:
print("X轴上的点")
[0, _]:
print("Y轴上的点")
[var x, var y] when y == x:
print("y = x 线")
[var x, var y] when y == -x:
print("y = -x 线")
[var x, var y]:
print("点坐标 (%s, %s)" % [x, y])