活动模式和成员约束

时间:2011-09-03 10:59:31

标签: f# constraints inline active-pattern

对于内联函数,可以创建一个约束:

let inline implicit arg =
  ( ^a : (static member op_Implicit : ^b -> ^a) arg)

要求给定的运算符或成员参数。有没有办法根据相似的东西进行匹配?

我想创建一个活动模式,其中传递给方法的任何参数与内联函数的约束匹配,如上所述触发该函数,其他所有内容都作为一些错误管理的一部分结束。

2 个答案:

答案 0 :(得分:29)

看起来您也可以编写内联活动模式。我以前没用过这个,但我现在试了一下,看起来工作得很好。下面的Test模式可以与实现返回Test的{​​{1}}方法的任何对象一起使用:

option< ^R >

现在,您可以定义一些定义let inline (|Test|_|) (a:^T) : option< ^R > = (^T : (member Test : unit -> option< ^R >) a) 方法的对象,并使用模式匹配它们:

Test

这看起来非常有趣,因为模式匹配现在是对象的一部分。

答案 1 :(得分:0)

我认为你必须使用反射,例如有一个函数需要o:obj,然后反映o.GetType()个成员。