2014-04-05 3 views
0

Scala newbie here.함수 리터럴에 대해 혼동 스럽습니다.

나는 다음과 같이 설정이 정의되고 선언이 :

scala> g.foreach(s => println(s)) 
1 
2 
3 

모든 좋은 : 함수 리터럴을 사용하여 다음과 같이

var g = Set(1,2,3) 

지금 내가 설정의 각 요소를 출력하고자합니다.

좀 더 간결 수 그래서 나는이 작업을 수행 :

scala> g.foreach(println) 
1 
2 
3 

모두 좋다. 나는이 작업을 수행 할 때

지금 :

scala> g.foreach(println()) 
<console>:9: error: type mismatch; 
found : Unit 
required: Int => ? 
       g.foreach(println()) 

은 왜 실패 하는가? 나 (초보자)에게 그것은 g.foreach(println)의 등가물 인 것처럼 보인다. 누군가가 오류를 설명해 주실 수 있습니까?

답변

4

함수 리터럴이나 함수를 처음 두 예제처럼 직접 전달하면 은 즉시 작동하는을 호출하지 않습니다. 그러나 마지막 예제에서 println()이 함수 및 메서드를 호출하기위한 구문이기 때문에이 즉시 호출합니다. println() 결과 유형이 Unit이기 때문에 실제로 유형의 값을 (String) => Unit 유형의 값을 필요로하는 메소드에 전달하고 있으며 물론 이들 값이 서로 다르므로 컴파일러에 오류가 표시됩니다.

+0

알았습니다! 건배. –

2
만약 println을 통과하면, 또 다른 한편으로는, 세트의 각 구성원에 적용되어야하는 함수를 전달하는 등가 println()Unit를 통과 통과 있지만 반드시 foreach 필요되지

세트의 타입이 무엇이든간에 무엇이든 가져 와서 그걸로 무엇인가를하는 함수를 전달했습니다.

+0

"println()이 (가) 단위를 전달 중입니다"라는 의미는 무엇입니까? –

+1

단위 스칼라는 특정 유형을 반환하지 않는 코드에 제공됩니다. Java에서는 무효라고 생각하십시오. println()이 println 메소드를 호출합니다.이 메소드는 [doc] (http://www.scala-lang.org/api/2.10.4/index.html#scala.Console$)에 따라 Unit을 반환합니다. – Peter

0

함수 println()은 줄 바꿈을 표준 출력에 인쇄하고 반환 유형은 Unit입니다.

val u: Unit = println() 

foreach 기능 집합의 각 요소에 적용 인수로서 기능을 필요로한다. println은 각 인수를 표시하는 함수이며 Unit은 함수가 아닙니다.

관련 문제