복붙노트

[SCALA] 스칼라가 예기치 않게 확장 기능에 대한 확인 유형 수없는

SCALA

스칼라가 예기치 않게 확장 기능에 대한 확인 유형 수없는

이유는, 스칼라, 주어진 :

a = List(1, 2, 3, 4)
def f(x : String) = { x }

하지

a.map(_.toString)

작동하지만

a.map(f(_.toString))

오류를 줄

missing parameter type for expanded function ((x$1) => x$1.toString)

해결법

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

    1.음 ... F ()는 매개 변수로 문자열을 사용합니다. 구축물의 _.toString는 A 형이있다 <: 모든 => 문자열. 실시 예는 상기 체크를 입력하지 않도록 함수 f ()는 문자열의 형식을 기대하고있다. 스칼라는이 경우에 친화적 인 것 같다 사용자에게 또 다른 기회를 제공합니다. 오류 메시지의 의미 ". 그것의 뭔가 내가 추측 할 수없는 경우이 알고리즘 내 타입 추론으로, 그것은 수도 컴파일의 형식을 넣어하지 않습니다."

    음 ... F ()는 매개 변수로 문자열을 사용합니다. 구축물의 _.toString는 A 형이있다 <: 모든 => 문자열. 실시 예는 상기 체크를 입력하지 않도록 함수 f ()는 문자열의 형식을 기대하고있다. 스칼라는이 경우에 친화적 인 것 같다 사용자에게 또 다른 기회를 제공합니다. 오류 메시지의 의미 ". 그것의 뭔가 내가 추측 할 수없는 경우이 알고리즘 내 타입 추론으로, 그것은 수도 컴파일의 형식을 넣어하지 않습니다."

    이 경우의 긴 형식 익명 함수를 작성하는 것, 즉 a.map (N => F (n.toString)). 이것은 그러나 와일드 카드 기호, 형식 유추의 제한이 없습니다. 당신이 a.map (F (_. toString))를 작성할 때 기본적으로는 _.toString 그렇지 않으면이 엄청난 모호함으로 이어질 것입니다, 그것을 찾을 수있는 가장 가까운 괄호 안의 익명 함수로 확장됩니다. F 같은 (g (_. toString))를 상상해보십시오. 하는가이 평균 온도 (g (X => x.toString)) 또는 F (X => g (x.toString))? 더 나쁜 모호성 여러 중첩 된 함수 호출에 발생하는 것입니다. 상술 한 바와 같이, 스칼라 형 검사기 따라서, 대부분의 논리 용액 걸린다.

    Nitpick은 : 코드의 첫 번째 라인은 발해야 = 목록 (1,2,3,4) :.

  2. from https://stackoverflow.com/questions/1545168/scala-unexpectedly-not-being-able-to-ascertain-type-for-expanded-function by cc-by-sa and MIT license