2012-06-20 2 views
23

가능한 중복은 :
What does :_* (colon underscore star) do in Scala?스칼라에서 자바 가변 메서드를 호출 할 때 _ _ * 무엇을합니까?

나는 스칼라 배열과 자바 가변 인자 메서드를 호출 REPL을 사용하고 있습니다. 나는이 할 경우

는 오류가 발생합니다 :

case class Person(name: String, age: Int) 
val array = Array(classOf[String], classOf[Int]) 
Person.getClass.getMethod("apply", array) 

을하지만 그 다음이 작업을 수행 할 경우 작동 :

Person.getClass.getMethod("apply", array:_*) 

내 질문 :_* 무엇을합니까입니까? Scala API에서 어디에 정의되어 있습니까?

+0

정확하게 중복되는지 확실하지 않습니다. 그는 스칼라 반복 매개 변수가 아니라 반복 된 매개 변수 ascription을 사용하여 Java 메서드를 호출합니다. – axel22

+2

스택 오버플로는 기호를 검색 할 때 매우 힘든 일입니다. 실제로는 완전히 무시합니다. 나중에 기호를 검색하려면 [Symbol Hound] (http://symbolhound.com/)를 사용하십시오. Stack Overflow에서 질문을 검색하지만 기호는 그대로 유지합니다. –

답변

28

을 추가하면 :_*은 배열을 varargs로 처리하도록 컴파일러에 지시합니다. Java와 마찬가지로 Scala에서도 마찬가지입니다.

foo(1, 2, 3, 4) //returns ArrayBuffer(2, 3, 4, 5) 

을하지만 난 (당신이 getMethod와 마찬가지로) 그것을 실제 순서를 전달하려면 내가 할 것이다 : 나는 방법을

def foo(args: Int*) = args.map{_ + 1} 

이 있다면 나는 같은 호출 할 수 있습니다

val mylist = List(1, 2, 3, 4) 
foo(mylist:_*) 
관련 문제