函數的閉包
Go 函數可以是一個閉包。閉包是一個函數值,它引用了其函數體之外的變量。該函數可以通路并賦予其引用的變量的值,換句話說,該函數被“綁定”在了這些變量上。
例如,函數 adder 傳回一個閉包。每個閉包都被綁定在其各自的 sum 變量上。
一、下面來看一個例子咯:
package main
import "fmt"
func adder() func(int) int {
sum := 0
return func(x int) int {
sum += x
return sum
}
}
func main() {
pos, neg := adder(), adder()
for i := 0; i < 10; i++ {
fmt.Println(
pos(i),
neg(-2*i),
)
}
}
輸出的結果:
0 0
1 -2
3 -6
6 -12
10 -20
15 -30
21 -42
28 -56
36 -72
45 -90