为什么这段代码不起作用,以及如何让它起作用?
let id1 = 0
match p1, p2 with
| Fluid, Particle id2 when id = id2
| Interface _, Particle id2 when id = id2 -> doSomething()
...
那么在模式组中有多个守卫可能会有几个吗?
答案 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()