【发布时间】:2015-10-29 23:03:36
【问题描述】:
我有几个带有count 字段的案例类。默认情况下它是 1,我的代码中有一个减少,它对重复项进行分组并将该值求和以找到每个对象的数量。例如:
case class Person(name: String, count = 1)
personList.groupBy(_.name).reduce((x,y) => x.copy(count = x.count + 1))
我在几个案例类中都有这个逻辑,由于我的逻辑比上面的例子复杂一点,我想创建一个通用的合并函数。
所以我创建了一个带有count 字段的sealed trait。然后我改变了我的案例类以扩展它,例如:
case class Person(name: String, override val count) extends Countable
到目前为止,一切都很好。
但是,我不知道如何声明我的 merge 函数,以便它只接受扩展 Countable 的案例类。因此,它找不到copy 方法。
这是我所拥有的:
def merge[T <: Countable](f: T => Seq[String])(ms: Seq[T]): Vector[T] =
ms.groupBy(x => f(x).mkString("_")).mapValues(_.reduce { (x,y) =>
x.copy(count = x.count + 1) // can't find `copy`
}).values.toVector
是否有一个类型类我也可以包含,这意味着一个类型有一个使用 Scala 2.11.7 的 copy 方法(或者是一个案例类)?
更新:
Countable 特征是:
sealed trait Countable {
def timesSeen: Long = 1
}
【问题讨论】: