对于内联函数,可以创建如下约束:
let inline implicit arg =
( ^a : (static member op_Implicit : ^b -> ^a) arg)
要求实参上给定的操作符或成员。是否存在基于相似内容的匹配方法?
我想创建一个活动模式,其中传递给方法的任何参数都匹配内联函数的约束,如上面所述,触发该函数,其他所有内容都作为某些错误管理的一部分结束。
看起来您也可以编写内联活动模式。我以前没有使用过这个,但我现在试过了,它似乎工作得很好。下面的Test
模式可以用于实现Test
方法并返回option< ^R >
的任何对象:
let inline (|Test|_|) (a:^T) : option< ^R > =
(^T : (member Test : unit -> option< ^R >) a)
现在您可以定义一些定义Test
方法的对象,并使用模式匹配它们:
type A() =
member x.Test() = Some(10)
match new A() with
| Test(n) -> printfn "%d" n
| _ -> printfn "failed"
这看起来是一个非常有趣的技术,因为模式匹配现在是对象的一部分。
我认为你必须使用反射,例如,有一个函数接受o:obj
,然后反射o.GetType()
的成员。