活动模式和成员约束



对于内联函数,可以创建如下约束:

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()的成员。

相关内容

  • 没有找到相关文章

最新更新