2016-06-28 4 views
0

여기왜 그렇지 않은가요? eol과 동등한가?

def coarse_grained: Int = { 
    def fib: Int = List(1,2) sum ; 
    fib 
    } 

one which does not

def coarse_grained: Int = { 
    def fib: Int = List(1,2) sum 
    fib 
    } 

유일한 차이점은 sum;이다 the code that compiles 의도이다.

+0

예, 답변은 적합하지만 질문은 유형에 따라 다릅니다. 유형에 대한 질문은 중복되지 않습니다. 나는 일반적인 것을 묻는다. 그래서 제 제형을 선호해야합니다 (적어도 보존해야합니다). –

+1

유형이 다른 것은 없습니다. 접미사 표기법 위치에서'List [T] .sum'를 호출하고 있지만, 컴파일러는이를 중위 표기법으로 추론하여'List (1,2) .sum (fib)'를하려고하는데, fib' 메소드는'Unit'을 리턴하고 Int는 리턴하지 않습니다. –

+0

즉, 구문 분석의 문제입니다. 유형은 부적합합니다. –

답변

4

알고 계신대로 List(2,6,9).drop(1)List(2,6,9) drop 1으로 작성할 수도 있습니다. 사실, 이것 역시 이렇게 쓰여질 수 있습니다.

List(2,6,9) drop 
1 

컴파일러는 줄 바꿈 이후에도 최종 인수를 찾고 있습니다. 따라서 List(1,2).sumList(1,2) sum과 같이 사용하려면 최종 인수를 찾기 위해 컴파일러에 알리려면 세미콜론 ;을 사용해야합니다. 오지 않을거야.

+1

세미를 추가하는 대신 빈 줄 (추가 줄 바꿈)을 추가하는 것이 더 일반적입니다. –

+0

@ som-snytt, 감사합니다. 나는 그것을 몰랐다. 사실, 나는 결코 그들 중 하나 (세미콜론이나 빈 줄)를 사용하지 않을 것이다. 도트 구문은 훨씬 명확하고 안전합니다. – jwvh