Scala中有序泛型的类型别名

Scala中有序泛型的类型别名,scala,generics,comparable,type-alias,Scala,Generics,Comparable,Type Alias,我对二叉树应该是什么样子有一个最小的定义: type Tree[T] = Option[Node[T]] case class Node[T](left: Tree[T], entry: T, right: Tree[T]) 现在,我想将二进制搜索树定义为: type BST[T: Ordering] = Tree[T] 但这并不能编译。我做错了什么?您得到的编译错误基本上是说上下文边界不能用于类型别名。上下文边界在函数或类定义中起作用。比如说, class BST[T: Ordering

我对二叉树应该是什么样子有一个最小的定义:

type Tree[T] = Option[Node[T]]
case class Node[T](left: Tree[T], entry: T, right: Tree[T])
现在,我想将二进制搜索树定义为:

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

但这并不能编译。我做错了什么?

您得到的编译错误基本上是说上下文边界不能用于类型别名。上下文边界在函数或类定义中起作用。比如说,

class BST[T: Ordering](val tree: Tree[T])
实际上是简写符号

class BST[T](val tree: Tree[T])(implicit ordering: Ordering[T])
请注意,不同的
BST
对象可能具有不同的
顺序,这些值必须在运行时存储

对于您的用例,最简单的事情可能是将上下文绑定到您心目中的泛型函数上

def f[T: Ordering](t1: Tree[T], t2: Tree[T]) {
  import scala.math.Ordering.Implicits._
  t1.get.entry < t2.get.entry
}
def[T:Ordering](t1:Tree[T],t2:Tree[T]){
导入scala.math.Ordering.Implicits_
t1.get.entry
然后在
f
的调用站点可以找到相应的
Ordering[T]
隐式,其中类型
T
是已知的。

您的意思是“BST[T]类的缩写符号(val-tree:tree[T])(隐式排序:Ordering[T])