2016-11-15 9 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