亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

需要更多關于 Go 的函數閉包的評論

需要更多關于 Go 的函數閉包的評論

Go
qq_笑_17 2022-08-30 15:02:58
下面是A Tour of Go中函數閉包的代碼,我對函數閉包有一點了解,但我是Go的初學者。package mainimport "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),        )    }}以下是一些問題:分別是[參數列表]和[return_types]?func adder() func(int) int {對于與問題.1相同的行,為什么有(int)而不是像(x int)這樣的東西?對于 ,這是否意味著將函數加法器分配給 pos 和 neg,為什么不應該是?pos, neg := adder(), adder()pos, neg := adder, adder
查看完整描述

1 回答

?
喵喔喔

TA貢獻1735條經驗 獲得超5個贊

問:對于 func adder() func(int) int { 分別是 [參數列表] 和 [return_types] 是什么?


答:在這里,我們有一個名為函數的函數,它不帶任何參數,該函數返回一個函數,該函數采用一個整數并返回一個整數。adder()func(int) int


問:對于與 Question.1 相同的行,為什么有 (int),而不是類似 (x int) 的東西?


答:這是功能adder()


func adder() func(int) int {

    sum := 0

    return func(x int) int {

        sum += x

        return sum

    }

}

看看正在返回的函數,這里已經有一個命名參數(),所以我們不需要在 中再次提到它,因為如果我們做這樣的事情,這里沒有用。func(x int) intxfunc adder() func(int) intfunc adder() func(x int) intx


因此,如果返回的函數具有 2 個參數(其中一個額外的參數是類型),則它類似于以下代碼:string


func adder() func(int, string) int {

    sum := 0

    return func(x int, y string) int {

        sum += x

        fmt.Println(y)

        return sum

    }

}

請注意,我們在 處添加了一個類型,這是因為我們返回的函數采用類型。stringfunc adder() func(int, string) int {string


問:對于 pos, neg := adder(), adder(), 這是否意味著將函數 adder 分配給 pos 和 neg,為什么不應該是 pos, neg := adder, adder?


答:看,當我們賦值給()時,就變成了一個新的函數,因為返回了一個函數,這樣我們就可以做到了。posadder()pos := adder()posadder()func(int) intpos(i)


同樣適用于 .neg


查看完整回答
反對 回復 2022-08-30
  • 1 回答
  • 0 關注
  • 67 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號