gpt4 book ai didi

java - 如果不存在,Scala 和 Java 选项会执行其他操作

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:54:58 24 4
gpt4 key购买 nike

scala 和 java 中的选项是我努力理解和使用的东西。我知道它在那里是为了消除“空”处理 hell 。坦率地说,我认为它引入了另一种 hell !

我在 java 中处理 null 的方式是:

String test = null;
if(test==null) // do something
else // do something else

这种决定是我在切换到选项时想要做的。

但是在 scala 和 java 中的 Option 类中都没有方法说,如果 null 做某事,否则做其他事。

有一种方法可以在 subject 为 null 的情况下使用默认值,例如

//in scala
test.getOrElse("defaulted")

我想知道为什么不能有方法,比如我写的隐式类来“拉皮条”一个 Scala 选项

object Definitions{
implicit class OptionExtensions[$Data](option: Option[$Data]){
def perform (found: ($Data)=>Any, notFound: ()=>Any): Any={
option match{
case Some(data)=> found(data)
case None=> notFound()
}
}
}
}

请忽略命名错误的方法。但是现在写完了,我应该可以使用这样的选项:

import Definitions._

val test : Option[String] = None

var builder =new StringBuilder


test.perform(builder ++= _, ()=>addError("not found"))
//or
println(test.perform(_.reverse, ()=>{"something else"}))

def addError(error:String)={
println(error)
}

相反,我不得不编写 match 和 case 来处理与 Options 有关的任何事情。我一定做错了什么。很可能,我对如何使用 Options 的理解是有缺陷的。上面的处理方式默认不在Option类中是有原因的。那可能是什么原因呢?

最佳答案

在 scala 中有几种方法可以实现:

  • optValue.map(successFunction).getOrElse(errorFunction)
  • optValue.fold(errorFunction)(successFunction)

可能你想要的是第二个,fold

java中有.map,不知道有没有.fold,需要看一下the docs

EDIT: As you asked to have newlines in fold, try with brackets:

Some(2).fold
{
println("error")
}
{
value =>
println(s"Success: $value")
}

关于java - 如果不存在,Scala 和 Java 选项会执行其他操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36468629/

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