直接回答:传统 switch 只能做"值是否相等"的分支判断;模式匹配(Python 3.10 的 match/case、Java 的 pattern matching)能按数据的结构和形状匹配,同时完成类型判断、解构和变量绑定,还能附加守卫条件。switch 可视为模式匹配能力的一个子集。
示例(Python 3.10+):
match point:
case (0, 0):
print("原点")
case (0, y):
print(f"Y 轴, y={y}") # 解构并绑定 y
case (x, y) if x == y: # 守卫条件
print("在对角线上")
case Point(x=0): # 按类属性匹配
print("类实例匹配")
case _:
print("其他")
展开解析:关键区别——
- switch 的 case 是常量比较,模式匹配的 case 是"模式":可以是字面量、序列、映射、类实例、通配符;
- 匹配成功的同时自动绑定子组件到变量,省去手动取值和强制转换(Java 的
instanceof模式匹配同理); - 支持
if守卫,把额外条件并入分支选择; - 配合密封类型(sealed)时编译器可做穷尽性检查。
易错点:Python 的 case SOME_CONST 中裸名字会被当作"绑定变量"而非值比较,引用常量需用点号(如 case Color.RED)。