Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/fsharp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
F#模式匹配中使用分组模式时的多重保护_F#_Pattern Matching - Fatal编程技术网

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保护对模式组中的所有情况都有效。