В Scala я пытаюсь понять соответствие шаблонов, однако большинство шаблонов самоочевидны, но шаблон конструктора и переменный шаблон привязки выглядят запутанными для меня. Я попробовал следующий пример из программирования Scala, 2EDВ чем разница между шаблоном конструктора и шаблоном привязки переменных в выражении соответствия scala?
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")
}
}
}
Я хочу знать, когда использовать конструктор шаблон
case Person("Alice", 25, address) => //some action here
и когда использовать переменные картины связывания
case p @ Person("Alice", 25, address) //some action here
Я всегда путаю в то время как он подходит к сопоставлению с образцом?
Очень полезный специально пример – optional