복붙노트

[SCALA] 스칼라에서 가변 길이 인수 목록의 유형은 무엇입니까?

SCALA

스칼라에서 가변 길이 인수 목록의 유형은 무엇입니까?

나는 다음과 같이 함수를 선언한다고 가정하자 :

def test(args: String*) = args mkString

인수의 유형은 무엇입니까?

해결법

  1. ==============================

    1.이것은 인수 또는 짧은 가변 인자의 변수 숫자라고합니다. T는 T *를 나타내고 그것의 정지형 서열 [T]이다. 서열은 [T]는 그것이이 경우 scala.collection.mutable.WrappedArray [T]에 구현으로 이용 될 수 있기 때문에 인터페이스이다. REPL을 사용하는 것이 유용 할 수있는 그런 일을 찾으려면 :

    이것은 인수 또는 짧은 가변 인자의 변수 숫자라고합니다. T는 T *를 나타내고 그것의 정지형 서열 [T]이다. 서열은 [T]는 그것이이 경우 scala.collection.mutable.WrappedArray [T]에 구현으로 이용 될 수 있기 때문에 인터페이스이다. REPL을 사용하는 것이 유용 할 수있는 그런 일을 찾으려면 :

    // static type
    scala> def test(args: String*) = args
    test: (args: String*)Seq[String]
    
    // runtime type
    scala> def test(args: String*) = args.getClass.getName
    test: (args: String*)String
    
    scala> test("")
    res2: String = scala.collection.mutable.WrappedArray$ofRef
    

    종종 가변 인자 [T] 대신 시퀀스 자체의 기능하는 서열의 요소를 전달하는 컴파일러 힌트 인 _ * 기호와 조합하여 사용된다 :

    scala> def test[T](seq: T*) = seq
    test: [T](seq: T*)Seq[T]
    
    // result contains the sequence
    scala> test(Seq(1,2,3))
    res3: Seq[Seq[Int]] = WrappedArray(List(1, 2, 3))
    
    // result contains elements of the sequence
    scala> test(Seq(1,2,3): _*)
    res4: Seq[Int] = List(1, 2, 3)
    
  2. from https://stackoverflow.com/questions/13205012/what-is-the-type-of-a-variable-length-argument-list-in-scala by cc-by-sa and MIT license