Skip to content

케이스 절의 변수 바인딩에 대해 더 살펴보기

Jaejin Gim edited this page Aug 29, 2016 · 1 revision

케이스 절의 변수 바인딩에 대해 더 살펴보기

  • 객체에서 값을 뽑아내고 싶지만, 객체 자체에도 변수를 대입하고 싶은 경우
  • p @ Person 문법은 Person 인스턴스를 p 에 대입, a @ Address Address 인스턴스를 a 에 대입
  • 인스턴스의 필드를 추출할 필요가 없는 경우 p: Person => 사용
// src/main/scala/progscala2/patternmatching/match-deep2.sc

case class Address(street: String, city: String, country: String)
case class Person(name: String, age: Int, address: Address)

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")
  }
}
Clone this wiki locally