将值添加到_通配符是什么意思?

时间:2016-11-15 18:10:40

标签: f#

在case语句的末尾实现通配符是什么意思?

采用以下语法:

match imp req with
| Success () -> this.Ok () :> _

这与:

相同
| Success () -> this.Ok () :> IHttpActionResult

编写这种语法有什么好处?

以下是我的问题的背景:

type PushController (imp) =
    inherit ApiController ()

    member this.Post (portalId : string, req : PushRequestDtr) : IHttpActionResult =
        match imp req with
        | Success () -> this.Ok () :> _
        | Failure (ValidationFailure msg) -> this.BadRequest msg :> _
        | Failure (IntegrationFailure msg) ->
            this.InternalServerError (InvalidOperationException msg) :> _

1 个答案:

答案 0 :(得分:7)

运算符:>执行静态upcast 到表达式右侧指定的类型。此运算符的语法是:

:> 表达

那就是你的例子:

some_value :> IHttpActionResult

这告诉编译器some_value实际上是一个实现IHttpActionResult的对象。

但是根据F#文档:

  

当您使用upcast运算符时,编译器会尝试推断   您要从上下文转换为的类型。如果编译器无法   为确定目标类型,编译器报告错误。

https://msdn.microsoft.com/en-us/visualfsharpdocs/conceptual/casting-and-conversions-%5Bfsharp%5D

因为Post方法可以返回的唯一类型是IHttpActionResult,所以可以让编译器推断它。

所以,在这个背景下:

:> _

相当于:

:> IHttpActionResult