티스토리 뷰

scala

[Scala] unapply 메서드

sungjine 2018. 5. 5. 16:17
반응형

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 Documentation

반응형

'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
댓글
반응형
최근에 올라온 글
Total
Today
Yesterday
글 보관함
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31