在Scala中键入别名有序泛型
发布时间:2020-12-16 18:52:02 所属栏目:安全 来源:网络整理
导读:我对二叉树的外观有一个最小的定义: type Tree[T] = Option[Node[T]]case class Node[T](left: Tree[T],entry: T,right: Tree[T]) 我现在想要将二叉搜索树定义为: type BST[T: Ordering] = Tree[T] 但那不会编译.我究竟做错了什么? 解决方法 你得到的编译
我对二叉树的外观有一个最小的定义:
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对象可能具有不同的Orderings,并且这些值必须在运行时存储. 对于您的用例,最简单的方法可能是将上下文绑定在您想到的泛型函数上, def f[T: Ordering](t1: Tree[T],t2: Tree[T]) { import scala.math.Ordering.Implicits._ t1.get.entry < t2.get.entry } 然后在f的调用站点找到适当的Ordering [T]隐式,其中类型T是已知的. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |