Scala - 如何在类型的泛型子类型上调用方法?

时间:2017-09-15 16:59:22

标签: scala generics

一位同事写了以下代码:

  def nonEmpty[Coll[_], T](implicit ev: Coll[T] <:< TraversableOnce[T]): Coll[T] => Boolean =
      (coll: Coll[T]) => coll.nonEmpty

目的是能够在nonEmpty的任何子类型上调用Traversable[T]。然而,这感觉过于复杂。我试图简化它,但到目前为止没有运气。我试过了,例如:

def nonEmpty2[Coll[T] <:< TraversableOnce[T]](coll: Coll[T]): Boolean = coll.nonEmpty

但是Wrong parameter Coll[T]已经拒绝了这一点。它只是一个语法(或一系列语法问题)吗?编写nonEmpty方法的最简单方法是什么?

1 个答案:

答案 0 :(得分:1)

没有必要指明您正在处理包含其他类型的通用(更高级)类型。只需要一个类型参数:

def nonEmpty2[T](coll: T)(implicit ev: T <:< TraversableOnce[_]): Boolean = coll.nonEmpty