在match语句中使用自定义计算表达式运算符

时间:2015-10-11 19:51:45

标签: f# computation-expression

现在我正在试验F#计算表达式。一般的想法是返回控制机制以驱动在从计算表达式的递归函数调用构建的每个步骤之后执行的动作。可以看到整个示例here

使用以下示例:

let rec loop () =
    actor {
        let! msg = m.Receive ()
        match msg with
        | "stop" -> return 0        // expected result: Return (0)
        | "unhandled" -> unhandled  // expected result: Unhandled 
        | x -> 
            mailbox.Sender() <! x
            return! loop ()         // expected result: (Become(fun m -> loop ()))
    }
loop ()

不幸的是,这会因unhandled上的编译时错误而结束:自定义操作可能无法与&#39;使用&#39;,&#39;尝试/与&#39;一起使用, &#39;尝试/最后&#39;,&#39; if / then / else&#39;或者&#39;匹配&#39;此计算表达式中的运算符

是否有可能以任何方式在匹配语句中使用自定义运算符?

1 个答案:

答案 0 :(得分:1)

我不确定CMD /C "sc.exe sdset bits D:(A;;CCLCSWRPWPDTLOCRRC;;;SY)(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;BA)(A;;CCLCSWLOCRRC;;;AU)(A;;CCLCSWRPWPDTLOCRRC;;;PU)" 计算的详细信息是什么,但如果actor是基础计算类型的值,您当然可以使用Unhandled生成它

在不知道细节的情况下,我认为应该工作:

return!