在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) :> _
答案 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