有没有办法将以下形式的可区分联合与事件模式匹配一​​起使用?我一直没能找到任何例子。

这就是我想要做的:

type c = a | b

type foo =
  | bar1
  | bar2 of c

//allowed
let (|MatchFoo1|_|) aString =
  match aString with
  | "abcd" -> Some bar1
  | _ -> None

//not allowed
let (|MatchFoo2|_|) aString =
  match aString with
  | "abcd" -> Some (bar2 of a)
  | _ -> None

为什么“Some”不能用于第二种方式?有没有另一种方法可以实现同样的目标?

最佳答案

您只需要在声明类型时使用 of,因此您可以使用 bar2 构造函数构造值,例如:

bar2 a

如果您将其更改为,您的第二个功能应该可以工作:
let (|MatchFoo2|_|) aString =
  match aString with
  | "abcd" -> Some (bar2 a)
  | _ -> None

关于f# - 具有可区分联合的主动模式匹配,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30755750/

10-11 16:07