pat*_*rit 6 generics scala comparable type-alias
我对二叉树的外观有一个最小的定义:
type Tree[T] = Option[Node[T]]
case class Node[T](left: Tree[T], entry: T, right: Tree[T])
Run Code Online (Sandbox Code Playgroud)
我现在想要将二叉搜索树定义为:
type BST[T: Ordering] = Tree[T]
Run Code Online (Sandbox Code Playgroud)
但那不会编译.我究竟做错了什么?
你得到的编译错误基本上说上下文边界不能用于类型别名.上下文边界在函数或类定义中起作用.例如,
class BST[T: Ordering](val tree: Tree[T])
Run Code Online (Sandbox Code Playgroud)
实际上是简写符号
class BST[T](val tree: Tree[T])(implicit ordering: Ordering[T])
Run Code Online (Sandbox Code Playgroud)
请注意,不同的BST对象可能具有不同的Orderings,并且这些值必须在运行时存储.
对于您的用例,最简单的方法可能是将上下文绑定在您想到的泛型函数上,
def f[T: Ordering](t1: Tree[T], t2: Tree[T]) {
import scala.math.Ordering.Implicits._
t1.get.entry < t2.get.entry
}
Run Code Online (Sandbox Code Playgroud)
然后Ordering[T]在调用站点找到适当的隐式f,其中类型T是已知的.
| 归档时间: |
|
| 查看次数: |
1395 次 |
| 最近记录: |