Far*_*mor 2 scala playframework
我有一个播放模板,其中参数的最典型场景是"null".
我已经明白,惯用的Scala更喜欢Option.
我来自java的第一个直觉是使用null.
带null的情况:
在控制器中
views.html.addPost(errors.errorsAsJson)
Run Code Online (Sandbox Code Playgroud)
在视图中
@(errors: play.api.libs.json.JsValue = null)
...
@if(errors != null){@errors}
Run Code Online (Sandbox Code Playgroud)
选项案例:
在控制器中
views.html.addPost(Option(errors.errorsAsJson))
Run Code Online (Sandbox Code Playgroud)
在视图中
@(errors: Option[play.api.libs.json.JsValue] = None)
...
@{errors match {
case None => {}
case _ => {errors.get}
}
}
Run Code Online (Sandbox Code Playgroud)
更新:我现在明白了.
代替:
@{errors match {
case None => {}
case _ => {errors.get}
}
}
Run Code Online (Sandbox Code Playgroud)
我可以这样做
@errors
Run Code Online (Sandbox Code Playgroud)
更新2:
显然我没有用null进行空检查?也许有些Play framework神奇?调用null变量毫无例外地工作.
原因Option是不那么冗长,你不需要做那些空检查.换句话说,你的match/case冗长是不必要的.
我们假设我们有这两个变量:
val x: Option[Int] = Some(5)
val y: Option[Int] = None
Run Code Online (Sandbox Code Playgroud)
如果我们想要调用函数Some而不是函数None,我们不需要进行null检查:
x foreach println // prints 5
y foreach println // nothing printed
Run Code Online (Sandbox Code Playgroud)
或者,如果我们想要应用一个函数并获得一个新结果,它就会相似,并跟踪输入是否存在.
val f = (i: Int) => i + 1
x map f // Some(6)
y map f // None
Run Code Online (Sandbox Code Playgroud)
有很多关于如何Option清理事物的例子,但这应该给你一个想法.
| 归档时间: |
|
| 查看次数: |
2090 次 |
| 最近记录: |