第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

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

函數(shù)列表中的Golang函數(shù)具有最后一個(gè)值

函數(shù)列表中的Golang函數(shù)具有最后一個(gè)值

Go
拉莫斯之舞 2021-04-08 18:18:55
在以下代碼段中,我創(chuàng)建了一個(gè)功能列表,按照我的觀察方式,該功能列表應(yīng)包含打印數(shù)字0 1 2的功能。package mainimport "fmt"func main() {    flist := make([]func(), 0)    for i := 0; i < 3; i++ {        flist = append(flist, func() { fmt.Printf("%d ", i) })    }    for j := 0; j < 3; j++ {        flist[j]()    }}但是,所有函數(shù)flist均相同main.main.func1,輸出為3 3 3即使i在循環(huán)中永遠(yuǎn)不會達(dá)到值3。這會讓我覺得func只是簡單地使用的地址i,每次都創(chuàng)建相同的func,但是i當(dāng)以后調(diào)用func時(shí),這超出了范圍。我在這里想念什么?
查看完整描述

1 回答

?
吃雞游戲

TA貢獻(xiàn)1829條經(jīng)驗(yàn) 獲得超7個(gè)贊

如果我們考慮為這些函數(shù)生成什么代碼,則確實(shí)是相同的:每次都使用相同的變量。即使i在循環(huán)后超出范圍,它仍會成為閉包的一部分,并且在閉包運(yùn)行時(shí),它的最新值會被該函數(shù)查看。循環(huán)退出時(shí),它是3。如果要將閉包綁定到特定值并防止其進(jìn)一步更改,則可以創(chuàng)建一個(gè)狹窄范圍的變量,如下所示:


package main


import "fmt"


func main() {

    flist := make([]func(), 0)

    for i := 0; i < 3; i++ {

        j := i  // a different variable for each iteration

        flist = append(flist, func() { fmt.Printf("%d ", j) })

    }

    for j := 0; j < 3; j++ {

        flist[j]()

    }


查看完整回答
反對 回復(fù) 2021-04-19
  • 1 回答
  • 0 關(guān)注
  • 355 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號