我希望这段代码片段返回给我None 而不是Some(null):
Option(x).map(x.getNullValue) // returns Some(null)
Run Code Online (Sandbox Code Playgroud)
我听说Scalaz库有处理这种情况的功能.那么我如何使用scalaz和标准的Scala库实现我的目标呢?
你可以flatMap在Option.apply这里使用方法而不是拉入scalaz:
Option(initialValue).flatMap(x => Option(x.getNullValue))
Run Code Online (Sandbox Code Playgroud)
这是有效的,因为该Option.apply方法null智能化:
val x: String = null
Option(x) //None
Option("foo") //Some("foo")
Run Code Online (Sandbox Code Playgroud)
所以如果你完全知道价值,你可以简单地做:
Option(x.getNullValue)
Run Code Online (Sandbox Code Playgroud)
您也可以使用其他方法Option一样filter,orElse或者getOrElse,根据不同的情况:
Option(initialValue).map(_.getNullValue).filter(_ != null)
Option(initialValue).orElse(Option(x.getNullValue))
Option(x.getNullValue).getOrElse(defaultValue)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3338 次 |
| 最近记录: |