代码使用scalac编译,但不在REPL中编译

时间:2012-04-27 01:12:16

标签: scala read-eval-print-loop

我有一些代码,比如在Foo.scala中可以轻松编译scalac, 但是当我启动REPL并说:load Foo.scala时,我遇到了一连串的错误。 我想这是标准的和有记录的,但似乎无法找到任何相关的 有关它的信息。

该文件如下所示:

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]

我得到的错误是这样的:

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
                  ^

1 个答案:

答案 0 :(得分:2)

看起来:load尝试逐块解释文件。由于您的块是相互依赖的,这是一个问题。

尝试使用“粘贴模式”将多个块粘贴到REPL中以便Scala一起编译:

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