繁体   English   中英

Scala:尝试使用元素序列折叠创建二叉树时出现未指定的值参数错误

[英]Scala: Unspecified value parameter error when trying to create binary tree using fold on sequence of elements

我试图在scala中写一个二叉树。 这是我的定义

sealed trait Tree[+T]
final object Empty extends Tree[Nothing]
final case class Leaf[A](value: A) extends Tree[A]
final case class Branch[A](elem: A, left: Tree[A], right: Tree[A]) extends Tree[A]


object BinaryTree {

  def insert[ A : Ordering] (t : Tree[A])(implicit elem : A): Tree[A] = {
    val order = implicitly[Ordering[A]]
    t match {
      case Empty => Leaf(elem)
      case Leaf(x) if (elem == x) => t
      case Leaf(x) if (order.lt(elem, x)) => new Branch(elem, Empty, new Leaf(x))
      case Leaf(x)  => new Branch(elem, new Leaf(x), Empty)
      case Branch(x, left, right) if (elem == x) => t
      case Branch(x, left, right) if (order.lt(elem, x)) => new Branch(x, insert(left), right)
      case Branch(x, left, right) =>   new Branch(x, left, insert(right))
    }
  }

  def apply[A: Ordering](as: A*): Tree[A] =
    as.tail.foldLeft[Tree[A]](Leaf(as.head))((t, elem) => BinaryTree.insert(t)(elem))
}

在我的BinaryTree.apply方法中,出现以下错误

"Unspecified value parameters: elem : A"

不知道那是什么意思还是我错过了什么。 谁能帮我一下

如果使用上下文绑定和隐式参数,则所有参数(包括上下文绑定)都将形成一组参数,该参数集位于最后。

因此,您的insert签名:

def insert[A: Ordering] (t: Tree[A])(implicit elem: A)

类似于:

def insert(t: Tree[A])(implicit o: Ordering[A], elem: A)

这意味着在调用insert时不应传递oelem参数,也不要同时传递它们。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM