복붙노트

[SCALA] 스칼라 람다 함수에서 _의 사용

SCALA

스칼라 람다 함수에서 _의 사용

내가 할 수있는 사람이 왜 설명해 주시겠습니까 :

a.mapValues(_.size)

대신에

a.mapValues(x => x.size)

하지만 난 할 수 없어

a.groupBy(_)

대신의

a.groupBy(x => x)

해결법

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

    1.여기를 쉽게되지 않습니다 :

    여기를 쉽게되지 않습니다 :

    a.groupBy(_)
    

    그러나이 같은에서 그것을보고 쉽게 :

    a.mkString("<", _, ">")
    

    나는 부분적으로 방법 / 함수를 적용하고 있습니다. 나는 일부 매개 변수 (첫 번째와 마지막)에 적용, 나는 다음과 같은 새로운 기능을지고있어, 그래서 적용되지 않은 두 번째 매개 변수를 떠날거야 :

    x => a.mkString("<", x, ">")
    

    첫 번째 예는 유일한 매개 변수가 부분적으로 적용되는 단지 특별한 경우입니다. 당신이 표현에 밑줄을 사용하는 경우, 그러나, 익명 함수의 위치 매개 변수를 의미합니다.

    a.mapValues(_.size)
    a.mapValues(x => x.size)
    

    익명 함수에서 그들 때문에 모두 결과, 혼동하기가 쉽다. 실제로 같은 (또한 익명의 함수 임)에있어서 값으로하는 방법으로 변환하는 데 사용되는 제 밑줄이있다 :

    a.groupBy _
    
  2. ==============================

    2.당신이 a.groupBy (_)을 쓸 때 컴파일러는 익명 함수로 이해한다 :

    당신이 a.groupBy (_)을 쓸 때 컴파일러는 익명 함수로 이해한다 :

    x => a.groupBy(x)
    

    스칼라 사양에 따라 §6.23 표현식에서 밑줄 자리는 익명의 매개 변수로 대체된다. 그래서:

    이 (X)의 종류를 추정 할 수 없기 때문에 식 X => a.groupBy (X)는 컴파일러를 혼동한다. A가 E 형 요소의 일부 집합 인 경우, 기대하는 컴파일러 형 (E)의 함수 => K 수 있지만, K는 유추 될 수없는 입력 X ...

  3. from https://stackoverflow.com/questions/7673545/usage-of-in-scala-lambda-functions by cc-by-sa and MIT license