编写可在任何类上运行的方法的正确方法是什么?
定义了加法运算?

我以为是这样的

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)
}

10-08 08:58