编写可在任何类上运行的方法的正确方法是什么?
定义了加法运算?
我以为是这样的
def trajectory[A <: {def +(a:A):A}](a:A): A = {
a + a
}
但它不起作用。
最佳答案
我会配一个type class:
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
}
}
当您要使用它时,可以将其添加为对type参数的隐式约束:
def foo[A](a0: A, a: A)(implicit semigroup: Semigroup[A]): A = {
semigroup.mappend(a0, a)
}