gpt4 book ai didi

scala - 将 Option 与更清晰的代码一起使用

转载 作者:行者123 更新时间:2023-12-01 07:19:04 32 4
gpt4 key购买 nike

如果这是一个新手问题,请道歉...
在 Scala 中,我知道最好使用 Option而不是返回 null当您有一个返回实例但可能不返回任何内容的函数时。我知道这在安全性方面做得更好,因为您没有传递空引用,并冒着风险 NullPointerException下线的某个地方。

但是,有没有比使用模式匹配更简洁的方法来处理选项?
我最终使用的语法如下:

val optObj : Option[MyObject] = myFunctionThatReturnsOption
optObj match {
case Some(obj) => {
//my code using obj
}

case None => _
}

实际上,所有这些都相当于 Java 版本:
MyObject obj = myMethodThatCanReturnNull()
if (obj != null) {
//my code using obj
}

使用 Option 时,是否有其他方法可以避免 Scala 中的所有这些样板文件?而不是 null引用?我想做的就是执行一段代码,只要 Option包含一些对象(即不是 None )。

最佳答案

使用 foreach , getOrElse和/或 map如果你想以更一致的方式工作。这是一些用例以及我会做的事情:

 //I want to get a non-null value and I have a sane default
val result = myOption getOrElse 3

//I want to perform some side effecting action but only if not None
myOption foreach{ value =>
println(value toString ())
}
//equivalently
for(value <- myOption){
//notice I haven't used the "yeild" keyword here
}

//I want to do a computation and I don't mind if it comes back as an Option
val result = for(value <- myOption) yield func(value)
val equivalent = myOption map func

第三个例子将使用 map在这两种情况下。

当您可以在“for comprehension”(Google 术语)中混合和匹配事物时,这会变得非常有趣。假设 func还返回 Option但我只希望在特定情况下工作:
 val result = for{ 
value <- myOption if value > 0
output <- func(value)
} yield output

现在我得到一个 Option但前提是 myOption包含一个大于零的整数。很漂亮的东西,不是吗?

关于scala - 将 Option 与更清晰的代码一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23247647/

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