F#模式匹配中使用分组模式时的多重保护
为什么这个代码不起作用,以及如何使它起作用F#模式匹配中使用分组模式时的多重保护,f#,pattern-matching,F#,Pattern Matching,为什么这个代码不起作用,以及如何使它起作用 let id1 = 0 match p1, p2 with | Fluid, Particle id2 when id = id2 | Interface _, Particle id2 when id = id2 -> doSomething() ... 那么在模式组中是否可能有多个when-guard呢?每个箭头/结果只能有一个when-guard,所以类似这样的方法可以工作: let id1 = 0 match p1, p2
let id1 = 0
match p1, p2 with
| Fluid, Particle id2 when id = id2
| Interface _, Particle id2 when id = id2 -> doSomething()
...
那么在模式组中是否可能有多个when-guard呢?每个箭头/结果只能有一个when-guard,所以类似这样的方法可以工作:
let id1 = 0
match p1, p2 with
| Fluid, Particle id2
| Interface _, Particle id2 when id1 = id2 -> doSomething()
| _ -> doSomething()
(注意,在这种情况下,or中的两个项必须绑定同一组标识符,以便在任何一种情况下都不会保留未初始化的标识符)
或者,添加第二个操作/结果:
match p1, p2 with
| Fluid, Particle id2 when id1 = id2 -> doSomething()
| Interface _, Particle id2 when id1 = id2 -> doSomething()
| _ -> doSomething()
谢谢你的回答。最好知道when保护对模式组中的所有情况都有效。