2013-04-26 3 views
10

일부 스칼라 API를 별칭 예를 들어 자기, 자기와 스칼라에서이 별명 =>

trait Function1[-T1, +R] extends AnyRef { self => 

내가 별칭이 일반적으로 어떻게 작동하는지 알고 있지만 표시되지 않습니다 에 Function1과 같은 형질은 그로부터 이익을 얻습니다. Function1은 자체을 사용하지 않습니다. 초기 언급을 제외하고는 어디에서나 그 목적이 무엇입니까?

이 질문에 대한 변형이 이전에 요청되었지만 답변을 직접 적용 할 수 없습니다. 답변을 통해 자체 유형 및 내부 클래스에 대해 논의했지만, 어떻게 적용되는지는 알 수 없습니다. 이 코드는 Function22 통해 Function0에 대해 동일한 생성기에 의해 생성되는

// GENERATED CODE: DO NOT EDIT. See scala.Function0 for timestamp. 

을 말한다 곳

+0

다른 클래스/특성 안에 'Function1'이 포함되어 있으면 외부 범위에서 여전히 'this'에 액세스 할 수 있습니다. – adelbertc

+1

'this'의'self' 별칭은 파생 된 유형에서 볼 수 있습니까? 그렇다면 도서관의 다른 곳에 의존 할 수 있습니까? –

답변

10

https://github.com/scala/scala/blob/2.10.1/src/library/scala/Function1.scala#L8를 참조하십시오. 이 Function5로 이동 어떻게 든 때 self를 사용하고보고 시작합니다

self.apply(x1, x2, x3, x4, x5)).curried 

그래서 나는 항상 발전기 템플릿에 포함 self =>을 쉽게했다 생각한다.

여기에 자체 참조를 추가하는 commit입니다. 이 N> = 5에 대해 다른 무언가를 왜 커밋 메시지가 실제로 설명, 내가 인용 : N> 네, 많은 적은 수의 클래스가 (동적으로 더 많은 개체를 만드는 비용으로 정적으로 생성되는

FunctionN을하는 그러한 기능이 얼마나 흔한 지 알면 합당한 것 같습니다. 또한 제한 사항을 파일 이름 길이로 실행하지 않고 N> 8에 대한 FunctionN의 카레를 허용합니다.

+0

'self.apply (x1, x2, x3, x4, x5)) .creried와'apply (x1, x2, x3, x4, x5)의 차이점은 무엇입니까? 빠른 테스트를 통해 그들은 똑같이 작동하는 것처럼 보입니다. OP 질문에 답을 얻지 못한 것 같습니다. – sourcedelica

+0

@sourcedelica, 예, 나는 메일 링리스트 아카이브와 이슈 트래커를 검색하여 추가 고고학을 만들었지 만 찾을 수 없었습니다. 나는 2.7.2를 다운로드했다. 그러나 그것도'self '없이 거기에서 작동한다. "self"*를 * Function2에서 Function22로 참조하는 것을 제외하고는 가독성을 위해 또는 단지를 위해 수행되는 것 이외의 다른 설명이 없습니다 ... – huynhjl

+0

감사합니다 - 나는 OP를 권하고 싶습니다. 'scala-user'에 질문합니다. – sourcedelica