scala에서 vararg에 대한 처리 내용을 설명한다.
object Objective {
def printAll(values: String *): Unit = {
values.foreach(print)
}
}
object Main extends App {
Objective.printAll("aaaa", "bbbbbb")
println()
val vals = List("aaaa", "bbbbbb")
Objective.printAll(vals : _*)
}
결과는 다음과 같다.
aaaabbbbbb
aaaabbbbbb
String* 과 같은 표현으로 String 타입의 vararg를 정의하고,
호출할 쪽에서는 List 컬렉션을 : _*으로 바꿔 전달했다.
자바 개발자에게는 황당할 수 있지만, Scala Language Specification의 4.6.2 Repeated Parameters를 살펴보면, 관련 내용이 나오고 있다. _*를 말할 때 (_* 타입 어노테이션)라고 한다.
Smooch operator 또는 unpacker라고 하기도 한다.
조금 더 수정해서 Any, Any*를 매개변수를 받는다고 가정했을 때, List :: 오퍼레이터를 사용한 사례이다.
object Objective {
def printAll(head: Any, values: Any *): Unit = {
(head :: values.toList).toArray.foreach(print)
}
}
object Main extends App {
Objective.printAll("xxx", "aaaa", "bbbbbb")
println()
val vals = List("aaaa", "bbbbbb")
Objective.printAll("xxx", vals : _*)
}
'scala' 카테고리의 다른 글
[scala] Odering/Ordered (sorted, sortBy, sortWith), TreeMap (0) | 2016.09.29 |
---|---|
[scala] @ 연산자 (0) | 2016.09.28 |
[scala] lazy, view (0) | 2016.09.28 |
[scala] Nill, Null, Nothing, Unit, null 간단 정리 (0) | 2016.09.28 |
[scala] self/ this와 Injection(Cake Pattern,케이크 패턴) (0) | 2016.09.27 |