Function 需要更多关于Go函数闭包的评论吗

Function 需要更多关于Go函数闭包的评论吗,function,go,closures,Function,Go,Closures,下面是《围棋之旅》中函数闭包的代码,我对函数闭包略知一二,但我是围棋的初学者 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

下面是《围棋之旅》中函数闭包的代码,我对函数闭包略知一二,但我是围棋的初学者

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),
        )
    }
}
主程序包
输入“fmt”
func加法器()func(int)int{
总和:=0
返回func(x int)int{
总和+=x
回报金额
}
}
func main(){
pos,neg:=加法器(),加法器()
对于i:=0;i<10;i++{
fmt.Println(
职位(i),
负(-2*i),
)
}
}
以下是问题:

  • 对于
    func adder()func(int)int{
    分别是什么[参数列表]和[返回类型]
  • 对于问题1的同一行,为什么有(int),而不是像(x int)这样的东西
  • 对于
    pos,neg:=adder(),adder()
    ,是否意味着要将函数adder分配给pos和neg,为什么不应该是
    pos,neg:=adder,adder

  • Q:for
    func adder()func(int)int{
    什么是[参数列表]和[返回类型]?

    答:在这里,我们有一个名为
    adder()
    的函数,它不接受返回函数
    func(int)int
    的参数,该函数接受一个整数并返回一个整数

    Q:对于问题1的同一行,为什么会有
    (int)
    ,而不是像
    (x int)

    答:这是
    加法器()
    函数

    func加法器()func(int)int{
    总和:=0
    返回func(x int)int{
    总和+=x
    回报金额
    }
    }
    
    看一看正在返回的函数,这里
    func(x int)int
    已经有一个命名参数(
    x
    ),所以我们不需要在
    func adder()func(int)int
    中再次提及它,因为如果我们执行类似
    func adder()func(x int)int
    的操作,这里的
    x
    就没有任何用处了

    因此,如果返回的函数有两个参数(一个额外的参数是
    字符串
    类型),那么它看起来像以下代码:

    func adder()func(int,string)int{
    总和:=0
    返回func(x int,y string)int{
    总和+=x
    fmt.Println(y)
    回报金额
    }
    }
    
    注意,我们在
    func adder()func(int,string)int{
    添加了
    string
    类型,这是因为我们返回的函数采用
    string
    类型

    Q:对于pos,neg:=adder(),adder(),这是否意味着要将函数adder分配给pos和neg,为什么不应该是pos,neg:=adder,adder?

    A:看,当我们将
    pos
    赋值给
    adder()
    pos:=adder()
    )时,
    pos
    成为一个新函数,因为
    adder()
    返回了一个函数
    func(int)int
    ,因此我们可以执行
    pos(i)


    对于
    neg

    Q:for
    func adder()func(int)int{
    什么是[参数列表]和[返回类型]?

    答:在这里,我们有一个名为
    adder()
    的函数,它不接受返回函数
    func(int)int
    的参数,该函数接受一个整数并返回一个整数

    Q:对于问题1的同一行,为什么会有
    (int)
    ,而不是像
    (x int)

    答:这是
    加法器()
    函数

    func加法器()func(int)int{
    总和:=0
    返回func(x int)int{
    总和+=x
    回报金额
    }
    }
    
    看一看正在返回的函数,这里
    func(x int)int
    已经有一个命名参数(
    x
    ),所以我们不需要在
    func adder()func(int)int
    中再次提及它,因为如果我们执行类似
    func adder()func(x int)int
    的操作,这里的
    x
    就没有任何用处了

    因此,如果返回的函数有两个参数(一个额外的参数是
    字符串
    类型),那么它看起来像以下代码:

    func adder()func(int,string)int{
    总和:=0
    返回func(x int,y string)int{
    总和+=x
    fmt.Println(y)
    回报金额
    }
    }
    
    注意,我们在
    func adder()func(int,string)int{
    添加了
    string
    类型,这是因为我们返回的函数采用
    string
    类型

    Q:对于pos,neg:=adder(),adder(),这是否意味着要将函数adder分配给pos和neg,为什么不应该是pos,neg:=adder,adder?

    A:看,当我们将
    pos
    赋值给
    adder()
    pos:=adder()
    )时,
    pos
    成为一个新函数,因为
    adder()
    返回了一个函数
    func(int)int
    ,因此我们可以执行
    pos(i)

    同样适用于
    neg