0

我有一些代码,比如说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
                  ^
4

1 回答 1

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
于 2012-04-27T01:13:55.360 回答