Hallo Kerl Scala ProgrammiererScala gewohnt Mustervergleich mit java.lang.String und Case-Klasse
Ich habe jetzt einige Monate mit Scala arbeiten, aber ich habe ein Problem mit einigen richtig grundlegenden Dingen, ich bin die Hoffnung, Sie wird mir dabei helfen.
case class PersonClass(name: String, age: Int)
object CaseTester {
def main(args:Array[String])
{
val string = "hej"
string match {
case e:String => println(string)
case PersonClass => println(string)
}
}
}
Wenn ich so mache ich Fehler:
pattern type is incompatible with expected type;
found : object PersonClass
required: java.lang.String
case PersonClass => println(string)
Und wenn ich dann die zweite Zeile in dem auf die folgende passende Muster ändern:
case e:PersonClass => println(string)
ich dann bekommen der Fehler:
error: scrutinee is incompatible with pattern type;
found : PersonClass
required: java.lang.String
case e:PersonClass => println(string)
Wenn ich jedoch die String-Definition in den folgenden ändern, kompiliert es in beiden Fällen.
Ursprünglich traf ich das Problem, während der eine Fall-Klasse machen versuchen, die einen Extraktor sein sollte auch in der Lage sein, aber wenn ich darüber nachdenke sehr viel Sinn machen tut :) – Stefan
Sie keine Klasse bieten kann so wie das. 'case PersonClass =>' funktioniert nur, wenn 'PersonClass' ein Objekt ist. Um Klassen zuzuordnen, weisen Sie entweder eine lokale Variable zu: 'case e: String =>' oder entpacken, wenn es sich um ein Tuple oder eine Fallklasse handelt: '(3, 4) match {case (a, b) =>' – Ryan