package main
import "fmt"
// intSeq funksiyasi yana bir funksiyani qaytaradi, uni anonim tarzda intSeq ichida aniqlaymiz.
// Qaytgan funksiya i o'zgaruvchisiga yopiladi (closure hosil qiladi).
func intSeq() func() int {
i := 0
return func() int {
i++
return i
}
}
func main() {
// intSeq ni chaqirib, natijani (funksiya) nextInt ga tayinlaymiz.
// Ushbu funksiya qiymati o'zining i holatini ushlab turadi va har chaqirilganda yangilanadi.
nextInt := intSeq()
// Yopilma effektini bir necha marta chaqirib ko'ramiz
fmt.Println(nextInt())
fmt.Println(nextInt())
fmt.Println(nextInt())
// Holat funksiya instansiyasiga xosligini tekshirish uchun yangisini yaratamiz
newInts := intSeq()
fmt.Println(newInts())
}
Terminalda bajarish:
$ go run closures.go
1
2
3
1
Keyingi bo'limda funksiyalarning rekursiya xususiyatini ko'rib chiqamiz.