まだよくわかってないけどメモ
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
}
}
関数テンプレートの特殊化みたいなものかな