-
Notifications
You must be signed in to change notification settings - Fork 0
/
lambda_v4.go
37 lines (31 loc) · 932 Bytes
/
lambda_v4.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
package main
import (
"fmt"
)
// This function returns another function, which we define anonymously in the body of intSeq.
// The returned function closes over the variable i to form a closure.
func intSeq() func() int {
i := 0
return func() int {
i++
return i
}
}
/*
Go supports anonymous functions, which can form closures.
Anonymous functions are useful when you want to define a function inline
without having to name it.
*/
func main() {
// We call intSeq, assigning the result (a function) to nextInt.
// This function value captures its own i value, which will be updated each time we call nextInt.
nextInt := intSeq()
// See the effect of the closure by calling nextInt a few times.
fmt.Println(nextInt())
fmt.Println(nextInt())
fmt.Println(nextInt())
// To confirm that the state is unique to that particular function,
// create and test a new one.
newInts := intSeq()
fmt.Println(newInts())
}