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ファイルをブロックごとに解釈しようとしているようです。ブロックは相互に依存しているため、これは問題です。

「貼り付けモード」を使用して、Scalaが一緒にコンパイルできるように複数のブロックをREPLに貼り付けてみてください。

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 に答える