有没有办法将以下形式的可区分联合与事件模式匹配一起使用?我一直没能找到任何例子。
这就是我想要做的:
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/