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

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

Golang 閉包不存儲捕獲的變量?

Golang 閉包不存儲捕獲的變量?

Go
慕斯709654 2023-05-08 16:12:26
在下面的代碼塊中,我希望輸出為 0、1、2、3、...、9。但是,只會產(chǎn)生輸出 10、10、...、10。package mainimport "fmt"func adder() []func() {    out := []func(){}    for i := 0; i < 10; i++ {        out = append(out, func() { fmt.Println(i) })    }    return out}func main() {    out := adder()    for i := 0; i < 10; i++ {        out[i]()    }}我的心理模型表明每次在 for 循環(huán)中都會生成并存儲一個新函數(shù),但事實并非如此。是否有一種解決方案可以在不修改簽名(無參數(shù)或全局變量)但仍保持 i 的當前值的情況下生成新函數(shù)?
查看完整描述

1 回答

?
心有法竹

TA貢獻1866條經(jīng)驗 獲得超5個贊

每次迭代都會創(chuàng)建一個新函數(shù),但它們都關(guān)閉相同的變量i。該變量在每次迭代時都會更新,直到最后一次迭代,因此當您遍歷并執(zhí)行所有這些函數(shù)時,它們都引用相同的i,具有相同的值,10。


如果您不想要這種行為,則不得關(guān)閉循環(huán)變量:


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

    temp := i

    out = append(out, func() { fmt.Println(temp) })

}


查看完整回答
反對 回復(fù) 2023-05-08
  • 1 回答
  • 0 關(guān)注
  • 109 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

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