【发布时间】:2015-10-11 19:51:45
【问题描述】:
现在我正在试验 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 上的编译时错误结束:自定义操作不能与“use”、“try/with”、“try/finally”、“if/then/else”结合使用此计算表达式中的 ' 或 'match' 运算符。
是否可以在 match 语句中以任何方式使用自定义运算符?
【问题讨论】:
-
什么是
unhandled?并且 - 假设它也是s of the right type - why don't you usereturn` 或return!? -
unhandled是自定义运算符。一般来说,Return 和 ReturnFrom 能够返回Return或Become类型的可区分联合,具体取决于表达式是值还是递归函数调用。此 DU 稍后用于应用附加逻辑。我想做的是添加额外的 DU 类型Unhandled,它应用了另一种逻辑。