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 모든 종류의 시도,하지만 인해 오래된 제대로 서브 클래스를 감지하지 것처럼 아무 소용이, 보인다 통사론?
위의 '옵션'특성은 두 번 정의됩니다. –
Thanks @Michael Zajac, 나는 첫 번째 선언을 제거했다. – cirne
그것은 나를 위해 잘 컴파일됩니다. 이걸 어디에서 컴파일하려고합니까? 파일 또는 REPL? 어떤 스칼라 버전 (비록 그것이 중요하다고 생각하지는 않지만)? –