воскресенье, 13 января 2019 г.

Основы Go: замыкания (closures)

В Go функции могут быть замыканиями (closures). Замыкание - это функция, которая ссылается к переменным вне ее тела. Функция имеет доступ к связанным переменным, а также может присваивать им значения; в этом смысле функция "связана" с этими переменными.

В следующем примере функция 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


Читайте также:


Комментариев нет:

Отправить комментарий