4

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

这就是我想要做的:

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”不能用第二种方式?有没有另一种方法来实现同样的目标?

4

1 回答 1

6

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

bar2 a

如果您将其更改为,您的第二个功能应该可以工作:

let (|MatchFoo2|_|) aString =
  match aString with
  | "abcd" -> Some (bar2 a)
  | _ -> None
于 2015-06-10T12:24:35.217 回答