编写对定义了加法操作的任何类进行操作的方法的正确方法是什么?
我想这就像
def trajectory[A <: {def +(a:A):A}](a:A): A = {
a + a
}
但它不工作。
编写对定义了加法操作的任何类进行操作的方法的正确方法是什么?
我想这就像
def trajectory[A <: {def +(a:A):A}](a:A): A = {
a + a
}
但它不工作。
我会选择一个类型类:
trait Semigroup[A] {
def mappend(a0: A, a: A): A
}
object Semigroup {
implicit val intAdditionSemigroup: Semigroup[Int] = new Semigroup[Int] {
override def mappend(a0: Int, a: Int): Int = a0 + a
}
}
当您想使用它时,您可以将其添加为类型参数的隐式约束:
def foo[A](a0: A, a: A)(implicit semigroup: Semigroup[A]): A = {
semigroup.mappend(a0, a)
}