2012년 4월 30일 월요일

closure

출처: http://tour.golang.org/#37


모든 함수는 closure 이다.

C++ 문법에 closure 는 없었다.

closure 가 무엇인가.

코드실행결과를 보면, 함수내부의 변수값을 기억한다.

C++ 의 static 변수와 그 기능이 같다.

함수내부변수를 기억하는기능을 가진 함수. 그것이 closure 인가.




package main


import (
"fmt"
)


func main() {


fmt.Println("---------------------")

pos, neg := adder(), adder()
fmt.Printf( "%T\n", pos)

fmt.Println( pos(1))
fmt.Println( pos(1))
fmt.Println( pos(1))
fmt.Println( pos(1))
fmt.Println("---------------------")
fmt.Println( neg(-1))
fmt.Println( neg(-1))
fmt.Println( neg(-1))
fmt.Println( neg(-1))
fmt.Println("---------------------")
}


func adder() func(int) int {
sum := 0
return func(x int) int {
sum += x
return sum
}
}



D:\DEV\PP\work_4\src>go run hello66.go
---------------------
func(int) int
1
2
3
4
---------------------
-1
-2
-3
-4
---------------------