2014-09-15 1 views
6

컴파일러가 반환 아무것도, 비어이?스칼라에서 '빈'case 문은 무엇을 의미합니까?

foo match { 
    case bar: Bar => println("First case statement") 
    case _ => 
} 

두 번째 사건을 해석 않습니다 방법.

val res: Unit = new foo match { 
    case bar: Bar => println("First case statement") 
    case _ => 
} 

당신이 (Unit을 반환) 대신 println의 뭔가 반환 명세서 변경하는 경우 :

val res: Any = new foo match { 
    case bar: Bar => "it's a bar" 
    case _ => 
} 

지금 컴파일러가 Any를 추정했습니다이 처음이기 때문에

답변

9

그것은 Unit를 돌려주는 의미 공통 상위 유형은 StringUnit 사이입니다.

bar과 일치하면 모든 변수를 포착한다는 의미이므로 대/소문자 일치는 잘못된 것입니다. bar: Bar을 원했을 것입니다. 그렇지 않으면 일치식이 바없는 모든 EXPR 인수에 대한 MatchError을 던져 때문에

+0

답변과 수정에 동의합니다. –

1

기본 경우, 귀하의 패턴 매칭 예에서 필요하다.

두 번째 경우에 코드가 지정되어 있지 않으므로이 경우 실행해도 아무런 효과가 없습니다.

두 결과 모두 단위 값 ()이며 전체 일치 표현식의 결과이기도합니다. 케이스 클래스와 패턴이 장을 일치에서 스칼라 책에서 마틴 오더 스키의 프로그래밍에에

자세한 내용.

관련 문제