ヌルを返しRegex.MatchData:なぜオプション[文字列]?
-
12-09-2019 - |
質問
なぜRegex.MatchData.group(I:INT):特定の理由がjava.lang.Stringではむしろオプションよりもnullを返します[文字列]
は?ScalaでNULL値を処理するための "Scalaの道" はありますか?
解決
それはJavaライブラリの上に浅いインタフェースであるため、
これは、nullを返します。私はそれがあまりにも吸うと思うし、私はそれにかまれています。
あなたがnullの場合も値を取得する場合は、、あなたはScalaの2.8にOption(value)
を書くことができ、それが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
所属していません StackOverflow