Spodziewam się, że spowoduje to błąd typu od (String, String)
w przypadku else
nie jest to Pair
.Dlaczego nie powoduje to błędu typu?
case class Pair(x: String, y: String)
val value = Console.readLine.toBoolean
val Pair(x, y) =
if (value) Pair("foo", "bar")
else false
Zamiast tego, jeśli wprowadzę wartość false, pojawia się następujący błąd w czasie wykonywania.
scala.MatchError: (foo,bar) (of class scala.Tuple2)
Przypuszczam, że dekonstrukcja jest tylko cukier do przypisywania wynik do zmiennej typu Any
a następnie dopasowanie na nim, ale wydaje się niefortunne, że Scala umożliwia tę muchę.
Muszę zapamiętać to polecenie ('skalak')! – schmmd
Dobrze jest wiedzieć, ale nie sądzę, że powszechną nadtypem "produktu" jest to, dlaczego się kompiluje. Zmieniłem mój przykład, aby to pokazać, chociaż oba nadal mają wspólny super typ "Any"! – schmmd