このコードが機能しない理由を理解するのに問題があります。Binary Treesセクション(http://aperiodic.net/phil/scala/s-99/)の99ScalaProblemsから入手しました。私には有効に見えます。NodeオブジェクトはNodeクラスのコンパニオンオブジェクトであり、ツリー上のリーフのコンストラクターを追加しています。しかし、コンパイルしようとすると、次のようになります。
<console>:10: error: too many arguments for method apply: (value: T)Node[T] in object Node
def apply[T](value: T): Node[T] = Node(value, End, End)
両端を削除してもコンパイルエラーは発生しませんが、単一の値でノードを作成すると、無限ループに陥ります。したがって、applyはより多くのNodeオブジェクトを構築しており、それ自体をNodeクラスに関連付けていないように見えます。
どんな助けでも大歓迎です。
sealed abstract class Tree[+T]
case class Node[+T](value: T, left: Tree[T], right: Tree[T]) extends Tree[T] {
override def toString = "T(" + value.toString + " " + left.toString + " " + right.toString + ")"
}
case object End extends Tree[Nothing] {
override def toString = "."
}
object Node {
def apply[T](value: T): Node[T] = Node(value, End, End)
}