10

Regex.MatchData.group(i:Int):java.lang.StringがOption [String]ではなくnullを返す特別な理由はありますか?

Scalaでnullを処理するための「ScalaWay」はありますか?

4

1 に答える 1

9

Java ライブラリに対する浅いインターフェイスであるため、null を返します。私もそれが悪いと思います、そして私はそれに噛まれました。

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
于 2009-12-03T21:44:18.507 に答える