복붙노트

[SCALA] 명명 된 인수에 밑줄

SCALA

명명 된 인수에 밑줄

누군가가 바로 여기에 무슨 일인지 내게 설명 할 수 있습니까? 나는 완전히 지금 그것으로 받고 있지 않다 :

val s = Seq(1D,2D,3D,4D)
case class WithUnit(value: Double, unit: String)
s map { WithUnit(_,"cm") } // works
s map { WithUnit(value = _ , unit = "cm") } // error: missing parameter type for expanded function ((x$2) => value = x$2)

내가 인수의 이름을 썼다 때문에 컴파일러는 매개 변수 유형을 추론 할수 없어 같아요. 그런데 왜하지? 그것은 shouldn't 때문 만 인수의 이름을 알리는 더 어려울 수?!

감사!

해결법

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

    1.때 당신이 쓴 :

    때 당신이 쓴 :

     WithUnit(value = _, unit = "cm")
    

    당신은 의미하는 원 :

     x => WithUnit(value = x, unit = "cm")
    

    오류 메시지를 자세히 살펴 경우에, 당신은 그것을 구문 분석, 컴파일러는 그런 식으로 보지 않았다 것을 볼 수 있습니다 :

     WithUnit(x => value = x, unit = "cm"})
    

    당신이 볼 수 있듯이,이 _ 더 밀접하게 당신이 원하는 것보다 범위가.

    _ 항상 수있는 단단한 비 퇴화 범위를 선택합니다. 범위는 종류에 상관없이, 분석하는 동안, 순수 문법적으로 판단된다.

    비 퇴화, 나는 컴파일러는 의미 생각하지 않았다는 것을 의미한다 :

    WithUnit(value = x => x, unit = "cm")
    

    협소 비축 퇴성 범위는 밑줄 최 함수 괄호 대하여 정의 된 범위를 의미한다. 이러한 규칙없이 컴파일러는 함수 호출이 중첩 될 때 _하는 기능에 해당하는 알 수 없을 것입니다.

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

    2.이 시도:

    이 시도:

    scala> val withUnits = s map { x => WithUnit(value = x, unit = "cm") }
    withUnits: Seq[WithUnit] = List(WithUnit(1.0,cm), WithUnit(2.0,cm), WithUnit(3.0,cm), WithUnit(4.0,cm))
    

    문제는 직접적으로 익명 함수를 정의하는 밑줄의 사용이다.

    상세한 설명은 제 8.5이다. 은 "프로그래밍 스칼라에서"책에서 자리 표시 자 구문.

  3. from https://stackoverflow.com/questions/5259006/underscore-in-named-arguments by cc-by-sa and MIT license