2012-04-27 4 views
0

J'ai un code, par exemple dans Foo.scala qui compile facilement avec scalac, mais je reçois une tempête de neige d'erreurs quand je boot le REPL et dire :load Foo.scala. J'imagine que c'est standard et documenté, mais que je ne trouve pas d'informations pertinentes à ce sujet.code se compile avec scalac mais pas dans REPL

Le fichier ressemble à ceci:

abstract class BST[A](implicit cmp: A => Ordered[A]) { 
    def fold[B](f: (B, A) => B, acc: B): B = { 
    this match { 
     case Leaf()  => acc 
    }     
    } 
} 

case class Leaf[A]()(implicit cmp: A => Ordered[A]) extends BST[A] 

Et je reçois des erreurs comme ceci:

scala> :load BST3.scala 
Loading BST3.scala... 
<console>:10: error: constructor cannot be instantiated to expected type; 
found : Leaf[A(in class Leaf)] 
required: BST[A(in class BST)] 
      case Leaf()  => acc 
       ^

Répondre

2

Il ressemble :load tente d'interpréter le fichier bloc par bloc. Puisque vos blocs sont mutuellement dépendants, c'est un problème.

Essayez d'utiliser « mode coller » pour coller plusieurs blocs dans le REPL Scala pour compiler ensemble:

scala> :paste 

// Entering paste mode (ctrl-D to finish) 

abstract class BST[A](implicit cmp: A => Ordered[A]) { 
    def fold[B](f: (B, A) => B, acc: B): B = { 
    this match { 
     case Leaf()  => acc 
    }     
    } 
} 

case class Leaf[A]()(implicit cmp: A => Ordered[A]) extends BST[A] 

// Exiting paste mode, now interpreting. 

defined class BST 
defined class Leaf 
+0

Merci pour la pointe re: mode coller! –

Questions connexes