본문 바로가기

Development/Programming

[Scala] Higher-order Functions

스칼라에서는 고차 함수를 지원한다. 간단하게 설명하면 다른 함수의 파라미터를 받아서 처리하는 것이 가능하다?!


아래의 예제를 보면 decorator의 layout과 7이라는 파라미터를 전달하면 apply에서 실행을 시켜준다.


  1. class Decorator(left: String, right: String) {
  2. def layout[A](x: A) = left + x.toString() + right
  3. }
  4. object FunTest extends App {
  5. def apply(f: Int => String, v: Int) = f(v)
  6. val decorator = new Decorator("[", "]")
  7. println(apply(decorator.layout, 7))
  8. }


실행결과는 아래와 같이 나온다.


  1. [7]


여기서 이 부분이 중요하다. apply에서 Int => String 으로 값을 강제하라고 요구를 하였다.

그래서 7이 출력이 되어지고


  1. def apply(f: Int => String, v: Int) = f(v)


여기서 Float으로 바꾸면


  1. def apply(f: Float => String, v: Int) = f(v)


이렇게 출력이 되어진다.


  1. [7.0]