[scala] @ 연산자

scala 2016. 9. 28. 19:24



간단한 패턴 매칭 예시이다. 

case class Member(name: String)

object Main extends App {
val samuel = Member("samuel")
samuel match {

case Member(name) => println(name)
case _ => println("x")
}
}


결과는 다음과 같다.

samuel




패턴 매칭할 때, 객체를 통째로 받고 싶다면 어떻게 해야 할까?

이 때 @ 연산자를 사용한다. 



case class Member(name: String)

object Main extends App {
val samuel = Member("samuel")
samuel match {
case p @ Member(_) => println(p)
case Member(name) => println(name)
case _ => println("x")
}
}


결과는 다음과 같다. 


Member(samuel)





패턴매칭과 @가 합쳐진 예시이다. 



object Main extends App {

(Some(1), Some(2)) match {
case d @ (c @ Some(a), Some(b)) => {
println(a)
println(b)
println(c)
println(d)
}
}
println

val d @ (c @ Some(a), Some(b)) = (Some(1), Some(2))
println(a)
println(b)
println(c)
println(d)
println

for (x @ Some(y) <- Seq(None, Some(1))) {
println(x)
println(y)
}
println

val List(x, xs @ _*) = List(1, 2, 3)
println(x)
println(xs)
}


결과는 다음과 같다.


1

2

Some(1)

(Some(1),Some(2))


1

2

Some(1)

(Some(1),Some(2))


Some(1)

1


1

List(2, 3)




Posted by '김용환'
,