9
Regex.MatchData.group(i:Int):java.lang.StringがOption [String]ではなくnullを返す特別な理由はありますか?Regex.MatchData nullを返す:なぜオプション[文字列]ですか?
Scalaでnullを処理するための "Scala Way"はありますか?
Regex.MatchData.group(i:Int):java.lang.StringがOption [String]ではなくnullを返す特別な理由はありますか?Regex.MatchData nullを返す:なぜオプション[文字列]ですか?
Scalaでnullを処理するための "Scala Way"はありますか?
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
私は常にそれらのオブジェクト定義をチェックすることを忘れ:)例をパターンマッチングはかなりあります面白い。 –
「Option(value)」はスカラ2.8でのみ動作します。 2.7.x –
本当に十分です。私は2.8のものをそのようなものとしてタグ付けするのが良かった。 –