[SCALA] toSet를 호출하여 매개 변수 유형 오류를 누락?
SCALAtoSet를 호출하여 매개 변수 유형 오류를 누락?
문자 목록에서 생성하려고 고유 문자 목록은 주파수 맵핑 - 예를 뭔가 같은 :
List('a','b','a') -> List(('a',2), ('b',1))
그래서 그냥 콘솔에서 주변의 일 처리,이 작품 :
val l = List('a', 'b', 'c', 'b', 'c', 'a')
val s = l.toSet
s.map(i => (i, l.filter(x => x == i).size))
하지만, 단지 마지막 두 줄을하지 않습니다 결합하여 단축?
l.toSet.map(i => (i, l.filter(x => x == i).size))
오류 "매개 변수 유형 누락"을 제공합니다.
스칼라는이 구문에 대해 불평하는 이유 누군가가 설명 할 수 있습니까?
해결법
-
==============================
1.가장 구체적인 선택 - 당신은 컴파일러 수치는 발 S = l.toSet을 말할 때 toSet에 대한 유일한 합리적인 유형은 숯불입니다. 그런 다음, S는 샤아의 집합입니다 주어진, 컴파일러는지도가 숯불에서해야한다는 깨닫는다.
가장 구체적인 선택 - 당신은 컴파일러 수치는 발 S = l.toSet을 말할 때 toSet에 대한 유일한 합리적인 유형은 숯불입니다. 그런 다음, S는 샤아의 집합입니다 주어진, 컴파일러는지도가 숯불에서해야한다는 깨닫는다.
그러나 두 번째 경우에, 그것은 toSet 요소의 유형이 무엇인지에 대한 판단을 보류. 그것은 숯불 될 수도 있지만 AnyVal는 모든 것처럼, 작업도 할 것이다.
l.toSet.map((i: Any) => (i, l.filter(x => x == i).size))
일반적으로 규칙은 컴파일러가 가장 구체적인 값을 선택해야한다는 것입니다. 함수가 인수 contravariant 때문에 그들이 인수로를 취할 때 컴파일러가 결정할 수 있도록, 그들은, 가장 구체적인이다. ( "초기 가정을 선호한다") 타이를 중단하는 규칙이 존재할 수 있지만, 구현 사람은 없다. 그래서 당신의 도움을 요청합니다.
당신은 문제를 해결하기 위해 함수 인수 또는 toSet에 두 종류를 제공 할 수 있습니다 :
l.toSet.map((i: Char) => (i, l.filter(x => x == i).size)) l.toSet[Char].map(i => (i, l.filter(x => x == i).size))
-
==============================
2.toSet의 유형 [숯불]를 추가하면 트릭을 수행합니다.
toSet의 유형 [숯불]를 추가하면 트릭을 수행합니다.
scala> l.toSet[Char].map(i => (i, l.filter(x => x == i).size)) scala.collection.immutable.Set[(Char, Int)] = Set((a,2), (b,2), (c,2))
from https://stackoverflow.com/questions/13130013/missing-parameter-type-error-by-calling-toset by cc-by-sa and MIT license
'SCALA' 카테고리의 다른 글
[SCALA] 스파크 및 SparkSQL : 어떻게 모방 윈도우 함수에? (0) | 2019.11.22 |
---|---|
[SCALA] 스칼라 여러 Seqs의 게으른 직교 제품 (0) | 2019.11.22 |
[SCALA] 스칼라의 미래와 약속 취소 (0) | 2019.11.22 |
[SCALA] 사용 사례 및 유형의 변수 유형의 패턴 예 (0) | 2019.11.22 |
[SCALA] 스칼라 - 바운드 변수의 목록을 얻을? (0) | 2019.11.22 |