2013-03-28 87 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