如何在Scala中编写获取任意类的方法

时间:2018-06-24 14:09:37

标签: scala structural-typing

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

我想像是

def trajectory[A <: {def +(a:A):A}](a:A): A = {
    a + a
}

但它不起作用。

1 个答案:

答案 0 :(得分:3)

我会选择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)
}