2010-12-12 2 views
19

이의이 질문을 위해 값을 만들어 보자 강조 이 함수의 속기를 쓸 수 있습니까? :스칼라는 최소한의 기능

a.map((x) => x) 

내 솔루션이 작동하지 않습니다 :

a.map(_) 
+0

별로 이해가되지 않습니까? 그것은 단지 NOP입니다. – delnan

+0

이것은 단지 예입니다. 문맥 상 이해할 수 있습니다. – coubeatczech

+2

스칼라에서 '_'설탕을 과용 (imho)하여 실제로 사람들이 언어를 선택하기 어려운 경우의 좋은 예입니다. – akauppi

답변

20

첫 번째 속기 양식은 교환 법칙이 성립되는 곱셈에 지점이없는

a map (2*) 

감사를 기록 할 수 있습니다.

(x) => x의 경우 identity 기능이 필요합니다. 이것은 Predef에 정의되어 있으며 일반적이므로 형식 안전성을 확신 할 수 있습니다.

+3

나는 당신이 교환 할 수 있다고 생각합니다. – Debilski

+2

'x => x'는 4 문자이고'identity'는 8 문자입니다. 이것이 내가'정체성 '을 사용하지 않는 이유입니다. –

+0

@debilski이 물건은 쉽게 알 수 없습니다! 키보드에 액세스하기위한 18 개월 된 싸움이있을 때가 아닙니다! –

15

이 사용 사례에는 identity 함수를 사용해야합니다.

a.map(identity) 

identity은 다음과 같이 scala.Predef에 정의되어

implicit def identity[A](x: A): A = x 
35

a.map(_)x => a.map(x)이고 a.map(x => x)이 아니기 때문에 a.map(_)이 작동하지 않습니다. 매개 변수 대신 하나의 _이 부분적으로 적용된 함수 인 을 나타 내기 때문에 이러한 현상이 발생합니다. 2*_의 경우 익명 함수의 약어는 입니다. 이 두 가지 용도는 너무 가깝기 때문에 매우 혼란 스럽습니다.