1
scala unapply 메서드를 이해하려고합니다.스칼라 unapply 메서드
다음은 제 이해입니다. 나는 Person 객체가 있다면 말 :
class Person(val fname: String, val lname: String)
object Person{
def unapply(x: Person) : Option[(String, String)] =
Some(x.fname,x.lname)
}
new Person("Magic", "Mike") match {
case Person(x, y) => s"Last Name is ${y}"
case _ => "Unknown"
}
나는 경우를 가정이 호출 뭔가 같은 :
val temp = Person.unapply(new Person("Magic", "Mike"))
if (temp != None) { val (x, y) = temp.get }
else { <go to next case> }
하지만 내가 어떻게 아래와 같은 때 적용 취소 작업 아래 수행합니다
new Person("Magic", "Mike") match {
case Person("Harold", y) => s"Last Name is ${y}"
case Person("Magic", y) => s"Last Name is ${y}"
case _ => "Unknown"
}
적용되지 않는 메소드에서 fname ("Magic")의 값에 어떻게 액세스하고 첫 번째 것과 동일한/올바른 결과를 주나요?
마술입니다! 진지하게, 그것이 "어떻게 작동하는지"에 대해 많이 이해하지 않습니다. 스칼라 컴파일러는'Person (foo, bar)'를보고 적절한 인자로'Person.unapply' 호출로 대체하고, 리턴을 검사하고, 제공된 변수에 값을 할당하거나 주어진 상수와 일치시킵니다. – Dima