2011-08-10 5 views
1
def list = List(1,2,3,4).map(1+_).reverse.foreach((i:Int)=> println(i)) 

은 올바르게 컴파일되지만 화면에 아무 것도 인쇄하지 않습니다. 이 부분은 오타 였지만 전혀 컴파일되지 않았습니다. foreach를 사용한 스칼라 이상한 기능. 예상되는 행동인가요?

def list = List(1,2,3,4).map(1+_).reverse.foreach((i:Int)=> println(i)) 
    println("--") 
    list 

-- 
    5 
    4 
    3 
    2 

로서 출력 그래서 목록이 경우 함수되었다 도시? 그게 제가 예상 한 결과가 아니라는 것을 추론합니다.

+0

신사 숙녀 여러분, 유추 할 수있는 유형을 적어 놓아야한다고 생각하는 이유는 여기에 있습니다. – Raphael

답변

3

예, list은 사실상 매개 변수를 사용하지 않는 방법입니다. 이 정의와 단순히으로 만드는 것의 주된 차이점은 사용 될 때마다 평가되므로 list을 참조 할 때마다 출력이 인쇄된다는 것입니다.

아래의 설명에서 지적한 것처럼 이라는 이름은 에 반환 유형이 Unit 인 것으로 오해 할 수 있습니다. 그래도 당신이 list라고 선언 한 것과 관계없이 그렇습니다.

+4

아니요,'list'는 함수가 아니므로 메소드입니다. 이 메소드는 그 몸체의 마지막 표현의 리턴 타입이기 때문에'Unit' (Java에서는 다소간'void')를 리턴합니다. –

+0

당신 말이 맞아요. 저의 표기법에 싫증이 났고 여기에 적용되지 않는 일반적인 OO 용어의 관점에서 차별화를 생각했습니다. – dfreeman

0

메소드 정의가 메소드를 실행하지 않습니다. 메소드를 호출해야합니다.

1

그런 경우 항상 값의 형식을 명시 적으로 작성하고 형식 불일치에 대해 불평하는 컴파일러를 볼 수 있습니다.

관련 문제