implicit 키워드를 사용하게 되면 prefix 없이 접근이 가능하고 그리고 넘겨 받을 수 있는 인수 또한 implicit라고 선언한 인수만 받을 수 있다.
abstract class SemiGroup[A] {
def add(x: A, y: A): A
}
abstract class Monoid[A] extends SemiGroup[A] {
def unit: A
}
object ImplicitTest extends App {
implicit object StringMonoid extends Monoid[String] {
def add(x: String, y: String): String = x concat y
def unit: String = ""
}
implicit object IntMonoid extends Monoid[Int] {
def add(x: Int, y: Int): Int = x + y
def unit: Int = 0
}
def sum[A](xs: List[A])(implicit m: Monoid[A]): A =
if (xs.isEmpty) m.unit
else m.add(xs.head, sum(xs.tail))
println(sum(List(1, 2, 3)))
println(sum(List("a", "b", "c")))
}
실행 결과
6
abc
'Development > Programming' 카테고리의 다른 글
[Java Design Pattern] Design Patterns in Java Tutorial (0) | 2015.02.10 |
---|---|
[Scala] Mixin Class Composition (0) | 2015.02.06 |
[Java Design Patten] Thread Specific Storage 패턴 (0) | 2014.11.26 |
[Java Design Patten] Two-Phase Termination 패턴 (0) | 2014.10.08 |
[Java Design Patten] Future 패턴 (2) | 2014.08.30 |