我正在通过Scala playframework教程,我遇到了这段令我困惑的代码片段:
def newTask = Action { implicit request =>
taskForm.bindFromRequest.fold(
errors => BadRequest(views.html.index(Task.all(), errors)),
label => {
Task.create(label)
Redirect(routes.Application.tasks())
}
)
}
Run Code Online (Sandbox Code Playgroud)
所以我决定调查并发现这篇文章.
我还是不明白.
这有什么区别:
implicit def double2Int(d : Double) : Int = d.toInt
Run Code Online (Sandbox Code Playgroud)
和
def double2IntNonImplicit(d : Double) : Int = d.toInt
Run Code Online (Sandbox Code Playgroud)
除了明显的事实,他们有不同的方法名称.
我implicit什么时候应该使用?为什么?
我有以下行动
def login: Result = Action(parse.json) { request =>
if (/* Let's we say here is some validation */) {
return BadRequest("bad")
}
Ok("all ok")
}
Run Code Online (Sandbox Code Playgroud)
这给了我一个错误.Intellij建议使用Action[JsValue]类型.当我说返回将是那种类型时,我再次出现错误BadRequest,因为类型不匹配.
我试着搜索这个问题,我找到了一些建议设置Action[AnyContent]为返回类型的答案.但我仍然得到错误.
另外我需要从if... 返回...我不想else在那之后写if,因为在一些更复杂的函数中,我很可能会有很少的if语句应该打破动作,如果我使用if/else方法,代码将是噩梦.