在case语句结尾处实现通配符意味着什么?
采用以下语法:
match imp req with
| Success () -> this.Ok () :> _
Run Code Online (Sandbox Code Playgroud)
这是一样的:
| Success () -> this.Ok () :> IHttpActionResult
Run Code Online (Sandbox Code Playgroud)
编写这种语法有什么好处?
这是我的问题的背景:
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) :> _
Run Code Online (Sandbox Code Playgroud)
运算符:>执行静态向上转换为表达式指定的类型到其右侧.此运算符的语法是:
:> 表达
那就是你的例子:
some_value :> IHttpActionResult
Run Code Online (Sandbox Code Playgroud)
这告诉编译器some_value实际上是一个实现的对象IHttpActionResult.
但根据F#文档:
使用upcast运算符时,编译器会尝试从上下文推断您要转换的类型.如果编译器无法确定目标类型,编译器将报告错误.
https://msdn.microsoft.com/en-us/visualfsharpdocs/conceptual/casting-and-conversions-%5Bfsharp%5D
因为该Post方法可以返回的唯一类型是IHttpActionResult,您可以让编译器推断它.
所以,在这种情况下:
:> _
Run Code Online (Sandbox Code Playgroud)
相当于:
:> IHttpActionResult
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
65 次 |
| 最近记录: |