のマッチタプルは、私が持っている:スカラ - オプション
val foo = Some(List(1, 2, 3)) -> Some("y")
私はそれに合わせキャストしたいと思います:
foo match {
case (Some(x), Some(y)) => println(x + " " + y)
case _ => println("error")
これはSome(List(1, 2, 3) -> Some("score"))
のため正常に動作しますが、とSome(List(1, 2, 3) -> None
、None -> Some("y")
またはNone -> None
のために失敗します。
error: constructor cannot be instantiated to expected type;
found : Some[A]
required: None.type
error: not found: value ...
なぜですか?
もちろん、私はgetOrElse()
を使用できますが、それほどエレガントではありません。
Thxをたくさん、 カルステン
アップデート:私はcase _
はそれの世話をするだろうと思うだろう
error: pattern type is incompatible with expected type;
found : Some[Int]
required: None.type
:
foo match {
case (x: Some[List[Int]], y: Some[Int]) => println(x.get)
case _ => println("error")
}
はとにも失敗。以下のコードで
Hm、それは意味がありますが、foo._1とfoo._2が定義されている可能性があります。 – Karsten
さて、私はfooが型(Option [List [Int]]、Option [Any])であると思っていましたが、 – Karsten
そのようにすることはできますが、scalaの言語設計者はSomeとNoneを与えることにしました これは実際のコードではほとんど問題になりません。fooを処理する最も一般的な型に定義するからです。たとえば、Option [List [Int ]]、Option [String]) –