开发者

Regex.MatchData returning null: why not Option[String]?

开发者 https://www.devze.com 2022-12-13 16:27 出处:网络
Is there any particular reason why Regex.MatchData.group(i: Int): java.lang.String returns null rather than Option[String]?

Is there any particular reason why Regex.MatchData.group(i: Int): java.lang.String returns null rather than Option[String]?

Is there a "Scala Way"开发者_C百科 to handle nulls in Scala?


It returns null because it is a shallow interface over the Java library. I think it sucks too, and I have been bitten by it.

If you get a value that may be null, you can write Option(value) on Scala 2.8 and it will become either None or Some(value). That doesn't work with pattern matching, but you can write your own extractor for that:

object Optional {
  def unapply[T](a: T) = if (null == a) Some(None) else Some(Some(a))
}

Examples:

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
0

精彩评论

暂无评论...
验证码 换一张
取 消