티스토리 뷰
반응형
unapply 메소드는 객체에서 인수를 추출하기 위한 메소드로 패턴 매칭에서 자주 쓰인다.
아래는 패턴 매칭에서 사용하는 예시이다.
object NumberClass {
def apply(num: Int): Int = num
def unapply(num: Int): Option[Int] = Some(num)
}
object Main extends App {
val number: Int = NumberClass(100)
number match {
case NumberClass(n) => println(n) // 100
}
}
패턴 매칭이 아니라 변수로 추출하여 사용할 수도 있는데 아래는 그 예시이다.
object NumberClass {
def apply(num: Int): Int = num
def unapply(num: Int): Option[Int] = Some(num * 2)
}
object Main extends App {
val NumberClass(num) = 100
println(num) // 200
}
unapply의 반환 값은 Option 으로 감싸줘야한다.
예외적으로 Boolean의 경우에는 Option으로 감싸지 않고 사용할 수 있는데 아래는 그 예시이다.
object NumberMatcher {
def unapply(x:String):Boolean = x == "yes"
}
object Main extends App {
"yes" match {
case NumberMatcher() => println("yes")
case _ => println("no")
} // yes 출력
}
반응형
'scala' 카테고리의 다른 글
[Scala] 부분 적용 함수 (0) | 2018.08.04 |
---|---|
[Scala] sealed 제어자 (0) | 2018.06.23 |
[Scala] apply 메서드 (0) | 2018.03.24 |
[Scala] val, var, def의 차이 (0) | 2018.02.28 |
[Scala] 동반 객체(Companion Object) (0) | 2017.12.24 |
댓글