[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.때 당신이 쓴 :
때 당신이 쓴 :
WithUnit(value = _, unit = "cm")
당신은 의미하는 원 :
x => WithUnit(value = x, unit = "cm")
오류 메시지를 자세히 살펴 경우에, 당신은 그것을 구문 분석, 컴파일러는 그런 식으로 보지 않았다 것을 볼 수 있습니다 :
WithUnit(x => value = x, unit = "cm"})
당신이 볼 수 있듯이,이 _ 더 밀접하게 당신이 원하는 것보다 범위가.
_ 항상 수있는 단단한 비 퇴화 범위를 선택합니다. 범위는 종류에 상관없이, 분석하는 동안, 순수 문법적으로 판단된다.
비 퇴화, 나는 컴파일러는 의미 생각하지 않았다는 것을 의미한다 :
WithUnit(value = x => x, unit = "cm")
협소 비축 퇴성 범위는 밑줄 최 함수 괄호 대하여 정의 된 범위를 의미한다. 이러한 규칙없이 컴파일러는 함수 호출이 중첩 될 때 _하는 기능에 해당하는 알 수 없을 것입니다.
-
==============================
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이다. 은 "프로그래밍 스칼라에서"책에서 자리 표시 자 구문.
from https://stackoverflow.com/questions/5259006/underscore-in-named-arguments by cc-by-sa and MIT license
'SCALA' 카테고리의 다른 글
[SCALA] 인 IntelliJ에 build.gradle를 가져 오는 방법 (0) | 2019.11.01 |
---|---|
[SCALA] 스칼라에서 임의의 값을 기존 DataFrame에 새 열을 추가하는 방법에 대한 (0) | 2019.11.01 |
[SCALA] 스파크 구조화 스트리밍이 자동으로 현지 시간으로 타임 스탬프로 변환 (0) | 2019.11.01 |
[SCALA] 스칼라 데프 foo는 = {}와 데프 foo는 ()의 차이점은 = {} 무엇입니까? (0) | 2019.11.01 |
[SCALA] 어떻게 구조화 스트리밍을 사용 카프카에서 JSON 형식의 기록을 읽어? (0) | 2019.11.01 |