복붙노트

[SCALA] 무엇`을 수행합니다 _ *`(콜론 스타 밑줄) 스칼라합니까?

SCALA

무엇`을 수행합니다 _ *`(콜론 스타 밑줄) 스칼라합니까?

이 질문에서 다음 코드 조각이 :

def addChild(n: Node, newChild: Node) = n match {
  case Elem(prefix, label, attribs, scope, child @ _*) => Elem(prefix, label, attribs, scope, child ++ newChild : _*)
  case _ => error("Can only add children to elements!")
}

++를 newChild 아이 : _ * 그 안에 모든 것이이 작품을 제외하고 꽤 명확하다

그것은 무엇을합니까?

I은 서열 [노드]가 다른 노드와 연결 한 다음 이해? 무엇을 수행합니다 _ *합니까?

해결법

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

    1.순서 1 그것은 "표시가".

    순서 1 그것은 "표시가".

    생성자 서명 봐

    new Elem(prefix: String, label: String, attributes: MetaData, scope: NamespaceBinding,
             child: Node*)
    

    이는라고한다

    new Elem(prefix, label, attributes, scope,
             child1, child2, ... childN)
    

    그러나 여기 그래서이 결과 시퀀스는 생성자에 대한 입력으로서 사용될 수 있도록 시퀀스 만, 자식 1 아닌 자식 2 등이있다.

    해피 코딩.

    1 이것은 SLS에 cutesy 이름을 가지고 있지 않지만, 여기 세부 정보입니다. 얻을 수있는 중요한 것은 스칼라 반복 매개 변수를 사용하여 메서드에 인수를 결합하는 방법 (노드 * 위로 표시된대로)이 변화한다는 것입니다.

    _ * 유형 약어는 SLS의 "4.6.2 반복 매개 변수"에서 설명합니다.

  2. ==============================

    2.아이 ++를 newChild : _ * 서열 노드 *에 [노드] (시퀀스보다, 우리는 가변 인자 작업 오히려있어 컴파일러를 알려줍니다) 확장합니다. 가변 인자만을 받아 들일 수있는 방법에 특히 유용합니다.

    아이 ++를 newChild : _ * 서열 노드 *에 [노드] (시퀀스보다, 우리는 가변 인자 작업 오히려있어 컴파일러를 알려줍니다) 확장합니다. 가변 인자만을 받아 들일 수있는 방법에 특히 유용합니다.

  3. ==============================

    3.위의 모든 대답은 훌륭하지만, 그냥이를 설명하는 샘플이 필요합니다. 여기있어 :

    위의 모든 대답은 훌륭하지만, 그냥이를 설명하는 샘플이 필요합니다. 여기있어 :

    val x : Seq[Seq[Int]] = Seq(Seq(1),Seq(2))
    
    def f(arg: Seq[Any]*) : Int = {
     arg.length
    }
    f(x) //1 as x is taken as single arg
    f(x:_*)  // 2 as x is "unpacked" as a Seq[Any]*
    

    이 인수를 풀고 결합하는 가변 인자 매개 변수에 이러한 요소를 함수 호출보다는 하나의 인수로 X를 확인하시기 바랍니다 : _ * 할 컴파일러에게하는 것입니다 그래서 지금 우리는 무엇을하는 것은 알고있다.

    그래서 간단히 말해서에서는 : 패스 인수는 매개 변수를 가변 인자 할 때 _ * 모호성을 제거하는 것입니다.

  4. ==============================

    4.나 같은 게으른 사람의 일부를 들어, 그냥 가변 인자에 서열을 변환!

    나 같은 게으른 사람의 일부를 들어, 그냥 가변 인자에 서열을 변환!

  5. from https://stackoverflow.com/questions/6051302/what-does-colon-underscore-star-do-in-scala by cc-by-sa and MIT license