scala - Scala中的类型别名有序泛型

标签 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](val tree: Tree[T])

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

注意不同的BST对象可能有不同的 Ordering s,并且这些值必须在运行时存储。

对于您的用例,最简单的方法可能是将上下文绑定(bind)到您想到的通用函数上,
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是已知的。

关于scala - Scala中的类型别名有序泛型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15672312/

相关文章:

Scala 的 XML 相等性问题

java - 实例化泛型类

java - 如何从 Java 中的泛型列表中获取参数类型?

java - 如何覆盖 compareTo (Java)

java - 为什么排序采用对象数组?

scala - Apache Spark - 数据集操作在抽象基类中失败?

sql - 加入 Liftweb 的复杂 SQL 查询

java - 通过在内部类中实现 Comparable 来提供多种排序选项

具有多个参数列表和柯里化(Currying)的 Scala 按名称参数

Java模板函数