Regex.MatchData返回null:为什么不选择[String]?

时间:2009-12-03 21:07:01

标签: scala null nullreferenceexception

为什么Regex.MatchData.group(i:Int):java.lang.String返回null而不是Option [String]有什么特别的原因?

Scala中是否存在处理空值的“Scala方式”?

1 个答案:

答案 0 :(得分:9)

它返回null,因为它是Java库上的浅层接口。我觉得它太糟糕了,我被它咬了。

如果您获得的值可能为null,则可以在Scala 2.8上编写Option(value),它将变为NoneSome(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