Scala的Higher-Kinded类型
Scala的Higher-Kinded类型 Higher-Kinded从字面意思上看是更高级的分类,也就是更高一级的抽象。我们先看个例子。 如果我们要在scala中实现一个对Seq[Int]的sum方法,应该怎么做呢? def sum(seq: Seq[Int]): Int = seq reduce (_ + _) sum(Vector(1,2,3,4,5)) // 结果值: 15 看起来很简单,刚刚我们实现了Seq[Int]的sum操作,那么如果我们想更进一步,我们想同时实现Seq[Int]和Seq[(Int,Int)]的操作该怎么处理呢? 不同的Seq需要不同的add实现,我们先抽象一个trait: trait Add[T] { def add(t1: T, T2: T): T } 接下来我们在Add的伴生类中定义两个隐式实例,一个Add[Int], 一个Add[(Int,Int)]。 object Add { implicit val addInt = new Add[Int] { def add(i1: Int, i2: Int): Int = i1 + i2 } implicit val addIntIntPair = new Add[(Int,Int)] { def add(p1: (Int,Int), p2: (Int,Int)): (Int,Int) = (p1.