스칼라 밑줄-오류 : 확장 함수에 대한 매개 변수 유형이 없습니다.


88

이것에 대해 꽤 많은 질문이 있음을 알고 있지만 작동해야한다고 생각하는 간단한 예제를 만들었지 만 여전히 작동하지 않으며 그 이유를 잘 모르겠습니다.

val myStrings = new Array[String](3)
// do some string initialization

// this works
myStrings.foreach(println(_))


// ERROR: missing parameter type for expanded function
myStrings.foreach(println(_.toString))

누군가 두 번째 문장이 컴파일되지 않는 이유를 설명 할 수 있습니까?


4
심지어 간단한 :myStrings.foreach (println)
사용자 알 수없는

답변:


120

다음으로 확장됩니다.

myStrings.foreach(println(x => x.toString))

원하는 :

myStrings.foreach(x => println(x.toString))

익명 함수의 자리 표시 자 구문은 가능한 가장 작은 포함 표현식을 함수로 바꿉니다.



인수에 대해 myStrings.foreach(println(_))자동으로 포함 toString되는 이유는 무엇 println입니까?
Kevin Meredith 2014

1
@Kevi 메르 디스의에 println은 객체가 전달되는 중의 있으며, toString ()를 호출
krookedking

1
익명 함수 틀 구문은 함수 가능한 최소 함유 식을 대체한다. 내가이 질문에 표현한 의구심에 도움이되었습니다 : stackoverflow.com/questions/37589210/…
GA1
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.