2016-11-15 47 views
3

在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) :> _ 
+2

这不是一个通配符,你只是让编译器推断类型转换为你基础上,'后'你提供的签名。 – nphx

+0

噢...那么推断的签名所需的返回类型是什么? –

+0

相关:http://stackoverflow.com/questions/3532637/type-mismatch-error-f-type-in​​ference-fail –

回答

7

操作:>执行静态上溯造型由表达其右侧指定的类型。这个操作符的语法是:

:>表达

这将是为你的榜样:

some_value :> IHttpActionResult 

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

但根据F#文档:

当您使用向上转型操作,编译器会尝试推断 类型你是从上下文转换。如果编译器无法确定目标类型 ,则编译器会报告错误。

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

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

因此,在这种背景下,这个:

:> _ 

等同于:

:> IHttpActionResult