ope*_*sas 13 scala playframework-2.0
这有点让我感到困惑
以下代码编译好了:
def save: Action[AnyContent] = Action {
if (1 == 2) {
BadRequest(toJson("something went wrong"))
} else {
Ok(toJson(Feature.find))
}
}
Run Code Online (Sandbox Code Playgroud)
但如果我只是添加return语句,我得到以下内容:
def save: Action[AnyContent] = Action {
if (1 == 2) {
return BadRequest(toJson("something went wrong"))
} else {
return Ok(toJson(Feature.find))
}
}
[error] found : play.api.mvc.SimpleResult[play.api.libs.json.JsValue]
[error] required: play.api.mvc.Action[play.api.mvc.AnyContent]
[error] return BadRequest(toJson("something went wrong"))
Run Code Online (Sandbox Code Playgroud)
我以为这两个代码是等价的......
BTW,Action是一个伴随对象,它有一个apply方法,它接收一个形式的函数:Request [AnyContent] => Result,并返回一个Action [AnyContent]
看起来像return语句,块返回直接执行BadRequest的结果...而且Ok ...而不是返回将块传递给Action对象伴侣的结果...
我对吗?
注意:我正试图找到摆脱这么多嵌套map和getOrElse的方法
ps:对不起,如果问题有点混乱,我很困惑自己......
Dan*_*ral 11
这两个表达确实做了很多不同的事情!
def save: Action[AnyContent] = Action {
if (1 == 2) {
BadRequest(toJson("something went wrong"))
} else {
Ok(toJson(Feature.find))
}
}
Run Code Online (Sandbox Code Playgroud)
在这里,save将返回结果Action(Ok(toJson(Feature.find))).现在,
def save: Action[AnyContent] = Action {
if (1 == 2) {
return BadRequest(toJson("something went wrong"))
} else {
return Ok(toJson(Feature.find))
}
}
Run Code Online (Sandbox Code Playgroud)
这里的情况更复杂.什么时候return Ok(toJson(Feature.find))评估,它将从save!也就是说,Ok(toJson(Feature.find))将不会被传递到Action.相反,该方法的执行save将停止并将Ok(toJson(Feature.find))作为其结果返回 - 除了这不是该类型save应该返回,因此它给出了类型错误.
记住:return从封闭中返回def.
| 归档时间: |
|
| 查看次数: |
4169 次 |
| 最近记录: |