gpt4 book ai didi

scala - 在 Scala 中期望为空。应该使用 Option 吗?

转载 作者:行者123 更新时间:2023-12-02 06:39:46 24 4
gpt4 key购买 nike

我有一个 Play 模板,其中最典型的参数场景是“null”。
我明白惯用的 Scala 更喜欢 Option。
我来自 Java 的第一直觉是使用 null。

空值大小写:
在 Controller 中

views.html.addPost(errors.errorsAsJson)

在 View 中

@(errors: play.api.libs.json.JsValue = null) 
...
@if(errors != null){@errors}

带选项的案例:
在 Controller 中

views.html.addPost(Option(errors.errorsAsJson))

在 View 中

@(errors: Option[play.api.libs.json.JsValue] = None)
...
@{errors match {
case None => {}
case _ => {errors.get}
}
}

更新:我现在明白了。
而不是:

@{errors match {
case None => {}
case _ => {errors.get}
}
}

我可以做

@errors

更新 2:显然我也不必对 null 进行 null 检查?也许是一些Play framework 魔法?调用 null 变量无一异常(exception)。

最佳答案

Option 不那么冗长的原因是您不需要执行那些 null 检查。换句话说,您的 match/case 冗长是不必要的。

假设我们有这两个变量:

val x: Option[Int] = Some(5)
val y: Option[Int] = None

如果我们想调用一个Some而不是None的函数,我们不需要空检查:

x foreach println  // prints 5
y foreach println // nothing printed

或者如果我们想应用一个函数并得到一个新的结果,它是相似的,并跟踪输入是否存在。

val f = (i: Int) => i + 1
x map f // Some(6)
y map f // None

关于 Option 如何清理的例子还有很多,但这应该能让您有所了解。

关于scala - 在 Scala 中期望为空。应该使用 Option 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10390783/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com