当模式匹配中使用分组模式的守卫时,F#是多重的

时间:2010-07-28 07:38:38

标签: f# pattern-matching

为什么这段代码不起作用,以及如何让它起作用?

let id1 = 0
match p1, p2 with
  | Fluid, Particle id2 when id = id2
  | Interface _, Particle id2 when id = id2 -> doSomething()
  ...

那么在模式组中有多个守卫可能会有几个吗?

1 个答案:

答案 0 :(得分:8)

每个箭头/结果只能保护一个,所以这样的事情会起作用:

let id1 = 0

match p1, p2 with
| Fluid, Particle id2
| Interface _, Particle id2 when id1 = id2 -> doSomething()
| _ ->  doSomething()

(注意在这种情况下,或者必须绑定同一组标识符中的两个项目,以便在任何一种情况下都没有未标识的标识符)

或者添加第二个动作/结果:

match p1, p2 with
| Fluid, Particle id2 when id1 = id2 -> doSomething()
| Interface _, Particle id2 when id1 = id2 -> doSomething()
| _ ->  doSomething()