In Scala versuche ich, Mustererkennung zu verstehen, aber die meisten der Muster sind selbsterklärend, aber Konstruktormuster und variable Bindungsmuster sehen für mich verwirrend aus. Ich habe versucht, aus Programming Scala folgenden Beispiel 2edWas ist der Unterschied zwischen Konstruktormuster und variablem Bindungsmuster in einem Scala-Übereinstimmungsausdruck?
case class Address(street: String, city: String, country: String)
case class Person(name: String, age: Int, address: Address)
object ScalaCaseDemoMain extends App{
val alice = Person("Alice", 25, Address("1 Scala Lane", "Chicago", "USA"))
val bob = Person("Bob", 29, Address("2 Java Ave.", "Miami", "USA"))
val charlie = Person("Charlie", 32, Address("3 Python Ct.", "Boston", "USA"))
for (person <- Seq(alice, bob, charlie)) {
person match {
case p @ Person("Alice", 25, address) => println(s"Hi Alice! $p")
case p @ Person("Bob", 29, a @ Address(street, city, country)) =>
println(s"Hi ${p.name}! age ${p.age}, in ${a.city}")
case p @ Person(name, age, _) =>
println(s"Who are you, $age year-old person named $name? $p")
}
}
}
Ich möchte wissen, wenn Konstruktor Muster
case Person("Alice", 25, address) => //some action here
zu verwenden und wenn variable Bindungsmuster verwenden
case p @ Person("Alice", 25, address) //some action here
Ich bin immer verwirrt Während es um Mustervergleich geht?
Sehr hilfreiches Beispiel – optional