Run*_* FS 13 f# inline constraints active-pattern
对于内联函数,可以创建一个约束,如:
let inline implicit arg =
( ^a : (static member op_Implicit : ^b -> ^a) arg)
Run Code Online (Sandbox Code Playgroud)
在参数上要求给定的运算符或成员.是否有基于相似的东西匹配的方法?
我想创建一个活动模式,其中传递给方法的任何参数与内联函数的约束匹配,如上所述触发该函数,其他所有内容都作为一些错误管理的一部分结束.
Tom*_*cek 30
看起来您也可以编写内联活动模式.我以前没用过这个,但我现在试了一下,看起来工作得很好.Test
下面的模式可以与任何实现Test
返回的方法的对象一起使用option< ^R >
:
let inline (|Test|_|) (a:^T) : option< ^R > =
(^T : (member Test : unit -> option< ^R >) a)
Run Code Online (Sandbox Code Playgroud)
现在,您可以定义一些定义Test
方法的对象,并使用模式匹配它们:
type A() =
member x.Test() = Some(10)
match new A() with
| Test(n) -> printfn "%d" n
| _ -> printfn "failed"
Run Code Online (Sandbox Code Playgroud)
这看起来是一种非常有趣的技术,因为模式匹配现在是对象的一部分.