Regex.MatchData.group(i: Int): java.lang.String 返回 null 而不是 Option[String] 有什么特别的原因吗?
Scala 中是否有“Scala 方式”来处理空值?
Regex.MatchData.group(i: Int): java.lang.String 返回 null 而不是 Option[String] 有什么特别的原因吗?
Scala 中是否有“Scala 方式”来处理空值?
它返回 null 因为它是 Java 库上的浅接口。我也觉得它很烂,我已经被它咬了。
如果你得到一个可能为 null 的值,你可以Option(value)
在 Scala 2.8 上编写它,它将变为要么None
要么Some(value)
。这不适用于模式匹配,但您可以为此编写自己的提取器:
object Optional {
def unapply[T](a: T) = if (null == a) Some(None) else Some(Some(a))
}
例子:
scala> val a:String = null
a: String = null
scala> a match {
| case Optional(None) => println("Got none")
| case Optional(Some(value)) => println("Got "+value)
| }
Got none
scala> val a = "string"
a: java.lang.String = string
scala> a match {
| case Optional(None) => println("Got none")
| case Optional(Some(value)) => println("Got "+value)
| }
Got string
scala> val a = "5"
a: java.lang.String = 5
scala> a match {
| case Optional(None) => println("Got none")
| case Optional(Some(value)) => println("Got "+value.toInt)
| }
Got 5