2016-11-30 4 views
0

私はスカラーの古いバージョン(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

上記の「オプション」特性は2回定義されています。 –

+0

ありがとう@Michael Zajac、私は最初の宣言を削除しました(同じエラーですが)。 – cirne

+0

それは私にとってうまくコンパイルされます。あなたはこれをどこでコンパイルしようとしていますか?ファイルまたはREPLで? Scalaのバージョン(私はそれが問題ではないと思うが)? –

答えて

3

各行を解釈する:load file.scalaではなく、コンテンツをペーストする:paste file.scalaを使用します。

+0

これは、それを解決します、ありがとう! – cirne