3
为什么此代码无效,以及如何使其工作?当守卫在模式匹配中使用分组模式时,F#倍数
let id1 = 0
match p1, p2 with
| Fluid, Particle id2 when id = id2
| Interface _, Particle id2 when id = id2 -> doSomething()
...
那么有可能有几个当模式组的卫兵?
为什么此代码无效,以及如何使其工作?当守卫在模式匹配中使用分组模式时,F#倍数
let id1 = 0
match p1, p2 with
| Fluid, Particle id2 when id = id2
| Interface _, Particle id2 when id = id2 -> doSomething()
...
那么有可能有几个当模式组的卫兵?
只能有一个当每个箭头/结果后卫,所以像这样的工作:
let id1 = 0
match p1, p2 with
| Fluid, Particle id2
| Interface _, Particle id2 when id1 = id2 -> doSomething()
| _ -> doSomething()
(注意在这种情况下,在这两个项目还是必须绑定同一组标识符使在这两种情况下没有IDENTIFER留下未初始化)
或可选择地添加第二个动作/结果:
match p1, p2 with
| Fluid, Particle id2 when id1 = id2 -> doSomething()
| Interface _, Particle id2 when id1 = id2 -> doSomething()
| _ -> doSomething()
谢谢您的回答。知道何时警卫对模式组中的所有案件有效是很好的事情。 – 2010-07-28 09:17:33