如果不执行其他操作,Scala和Java选项会存在
scala和
java中的选项是我难以理解和使用的东西.我理解它的存在是为了消除’null’处理地狱.坦率地说,我认为它引入了另一种地狱!
我在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") 我想知道为什么不能使用像我写的“pimp up”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) } 相反,我被迫编写匹配和案例来处理与Options有关的任何事情.我一定做错了什么.最有可能的是,我对如何使用选项的理解是有缺陷的.由于某种原因,上面的处理方式默认不在Option类中.那可能是什么原因? 解决方法
在scala中有几种方法可以实现:
> optValue.map(successFunction).getOrElse(errorFunction) 可能你想要的是第二个,折叠. 在java中有一个.map,不确定是否有.fold,你需要看看the docs
Some(2).fold { println("error") } { value => println(s"Success: $value") } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |