我有几个函数,其唯一的参数要求是它具有某种可增长的集合(即它可以是队列、列表、优先队列等),因此我尝试创建以下类型别名:
type Frontier = Growable[Node] with TraversableLike[Node, Frontier]
与函数定义一起使用,如下所示:
def apply(frontier: Frontier) = ???
但类型别名返回错误“涉及类型 Frontier 的非法循环引用”。有没有办法绕过非法循环引用来使用类型别名或类似的东西?
一种解决方案是使用以下内容:
def apply[F <: Growable[Node] with TraversableLike[Node, F]](f: F) = ???
但是当函数定义看起来与类型别名完全相同时,这似乎增加了不必要的冗长。该类型也用于其他地方,因此类型别名将大大增加可读性。