まだよくわかってないけどメモ
object Main { trait Adder[T] { def add(lhs: T, rhs: T): T } // int型の + 処理 implicit object IntAdder extends Adder[int] { def add(lhs: int, rhs: int): int = lhs + rhs } // String型の + 処理 implicit object StringAdder extends Adder[String] { def add(lhs: String, rhs: String): String = lhs + rhs } // 総称的な + 処理 def sum[T](ls: List[T])(implicit adder: Adder[T]) = { ls.reduceLeft{(l: T, r: T) => adder.add(l, r)} } def main(args : Array[String]) : Unit = { println(sum(List(1, 2, 3))) // 6 println(sum(List("a", "b", "c"))) // abc } }
関数テンプレートの特殊化みたいなものかな