2012-03-15 2 views
3

질문과 같습니다.`() => Unit '은 무엇을 의미합니까?

이 내용은 콜백 기능을 저장하는 데 사용 된 List[() => Unit]에서 발견되었습니다.

나는 List[type]을 이해하고 Unit은 아무것도 반환하지 않는 함수의 반환 유형입니다.

답변

8

(T1,...,Tn) => TTn 통해 T1 유형의 매개 변수를 입력 T를 반환하는 함수의 형태이다. 따라서 () => Unit은 매개 변수를 사용하지 않고 반환 유형 Unit이있는 함수 유형입니다. 따라서 List[() => Unit]은 이러한 기능을 포함하는 목록 유형입니다.

+0

"T1 ~ Tn 유형의 매개 변수"이므로 'f (T1) : Unit', 'f (T2) : Unit'과 같은 함수는 해당 목록에 유효한 유형입니까? 'f (T1, T2)'와 같은 것은 어떨까요? – aitchnyu

+2

@aitchnyu 아니요. 목록의 유형이 List [(T1, T2) => Unit] 인 경우이 목록에는 두 개의 매개 변수 (첫 번째 유형은 T1 유형이고 두 번째는 T2 임)와 반환 유형 Unit . 따라서'f (x : T1, y : T2) : Unit'으로 정의 된 함수를 저장할 수는 있지만'f (x : T1)'또는'f (y : T2)'로 정의 된 함수는 저장할 수 없습니다. 마찬가지로'List [() => Unit] 타입의리스트는 매개 변수를 정확히 취하지 않는 함수 만 저장합니다. – sepp2k

4

먼저 기능 목록이 있습니다. 각 함수는 매개 변수를 사용하지 않습니다 (닫힌 괄호는 ()을 의미 함). void와 비슷한 결과가없는 값인 Unit을 반환합니다.

순수 함수 세계에서는 아무 것도 취하지 않고 아무것도 반환하지 않기 때문에 ()=>Unit 유형의 함수는 쓸모가 없습니다. 그러나 스칼라는 순수 함수 언어가 아닙니다. 그것은 부작용이 있습니다. 유용하게 사용하려면 목록의 함수에 반드시 부작용이 있어야합니다. 콜백 함수이기 때문에 언제 발동하는지에 대해서도 알고 있습니다.