2016-11-30 1 views
0

이전 버전의 scala (here에서 다운로드)로 작성된 것으로 보이는 "Functional Programming in Scala"라는 책에서 코드를 실행하려고합니다. tmp.scala :이 발생스칼라 하위 클래스 패턴 일치

sealed trait Option[+A] 
case class Some[+A](get: A) extends Option[A] 
case object None extends Option[Nothing] 

trait Option[+A] { 
    /* returns None if None, or function applied to the some object */ 
    def map[B](f: A => B): Option[B] = this match { 
     case None => None 
     case Some(a) => Some(f(a)) 
    } 
} 

오류는 다음과 같습니다

$ scala 
Welcome to Scala 2.12.0-20161021-070700-8684ae8 (OpenJDK 64-Bit Server VM, Java 1.8.0_112). 
scala> :load tmp.scala 

tmp.scala:17: error: pattern type is incompatible with expected type; 
found : None.type 
required: Option[A] 
      case None => None 
       ^
tmp.scala:17: error: type mismatch; 
found : None.type 
required: Option[B] 
      case None => None 
         ^
tmp.scala:18: error: constructor cannot be instantiated to expected type; 
found : Some[A(in class Some)] 
required: Option[A(in trait Option)] 
      case Some(a) => Some(f(a)) 
       ^
tmp.scala:18: error: type mismatch; 
found : Some[B] 
required: Option[B] 
      case Some(a) => Some(f(a)) 
           ^

내가 이것에 codefu 모든 종류의 시도,하지만 인해 오래된 제대로 서브 클래스를 감지하지 것처럼 아무 소용이, 보인다 통사론?

+1

위의 '옵션'특성은 두 번 정의됩니다. –

+0

Thanks @Michael Zajac, 나는 첫 번째 선언을 제거했다. – cirne

+0

그것은 나를 위해 잘 컴파일됩니다. 이걸 어디에서 컴파일하려고합니까? 파일 또는 REPL? 어떤 스칼라 버전 (비록 그것이 중요하다고 생각하지는 않지만)? –

답변

3

각 줄을 해석하는 :load file.scala 대신 내용을 붙여 넣는 :paste file.scala을 사용하십시오.

+0

해결해 줘서 고마워! – cirne