스칼라에서는 고차 함수를 지원한다. 간단하게 설명하면 다른 함수의 파라미터를 받아서 처리하는 것이 가능하다?!
아래의 예제를 보면 decorator의 layout과 7이라는 파라미터를 전달하면 apply에서 실행을 시켜준다.
class Decorator(left: String, right: String) {
def layout[A](x: A) = left + x.toString() + right
}
object FunTest extends App {
def apply(f: Int => String, v: Int) = f(v)
val decorator = new Decorator("[", "]")
println(apply(decorator.layout, 7))
}
실행결과는 아래와 같이 나온다.
[7]
여기서 이 부분이 중요하다. apply에서 Int => String 으로 값을 강제하라고 요구를 하였다.
그래서 7이 출력이 되어지고
def apply(f: Int => String, v: Int) = f(v)
여기서 Float으로 바꾸면
def apply(f: Float => String, v: Int) = f(v)
이렇게 출력이 되어진다.
[7.0]
'Development > Programming' 카테고리의 다른 글
[Scala] Polymorphic Methods (0) | 2015.03.05 |
---|---|
[Scala] Pattern Matching (0) | 2015.03.02 |
[Scala] Automatic Type-Dependent Closure Construction (0) | 2015.02.17 |
[Scala] Nested Functions (0) | 2015.02.16 |
[Java Design Pattern] Design Patterns in Java Tutorial (0) | 2015.02.10 |