[함수형 프로그래밍] Scala Closure를 알아보자
Closure
Expression
스칼라에서 Call by name은 기술적으로 존재하지 않는다.
스칼라에서 Expression은 암묵적으로 value로 변경된다. 예를 들어 f함수는 Int=>Int인 g value를 받아서 리턴한다.
def g(x:Int) : Int = x
def f : Int => Int =
g
f(3)
Anonymous Function은 명시적으로 value로 변경된다.
// 다음은 value이다.
(x:Int) => Int
Closure은 Expression(함수)를 정의한 후에 곧바로 명시적으로 value로 묶어서 리턴한다.
val t = 0
val f = {
val t = 10
def g(x: Int) :Int = x + t
g _
}
f(20)
Packing
지역 환경을 묶어서 리턴한다.
함수를 묶어서 value를 리턴하는 것이 핵심이다.
블록에서 함수를 리턴하는 방법은 클로져밖에 없다. 즉 value로 만들어주기 위해서 클로져를 사용한다.
Int => Int
Int를 받아 computation 후에 int를 내보내는 value
=>
def와 val의 차이는 =>의 차이와 같다.
댓글
댓글 쓰기