2013-03-28 88 views
6

我有一个二叉树应该是什么样子的最小定义:型走样下令仿制药在斯卡拉

type Tree[T] = Option[Node[T]] 
case class Node[T](left: Tree[T], entry: T, right: Tree[T]) 

我现在要定义一个二进制搜索树:

type BST[T: Ordering] = Tree[T] 

但不能编译。我究竟做错了什么?

回答

8

你得到的编译错误基本上说上下文边界不能用于类型别名。上下文边界可以在函数或类定义中工作。例如,

class BST[T: Ordering](val tree: Tree[T]) 

实际上是

class BST[T](val tree: Tree[T])(implicit ordering: Ordering[T]) 

需要注意的是不同的BST对象可能有不同的Ordering s,而这些值必须存储在运行时的速记符号。

为您的使用情况下,最简单的事情可能是把绑定在你心目中的通用功能的情况下,

def f[T: Ordering](t1: Tree[T], t2: Tree[T]) { 
    import scala.math.Ordering.Implicits._ 
    t1.get.entry < t2.get.entry 
} 

然后适当Ordering[T]隐含将以f通话网站上找到,其中T类型是已知的。

+1

您的意思是“类BST [T](val tree:Tree [T])(隐式排序:排序[T])的简写符号'” – Faiz 2013-03-28 01:43:50

+0

@Faiz,固定感谢。 – 2013-03-28 01:44:41