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

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

golang 發(fā)送一個 lambda 捕獲組

golang 發(fā)送一個 lambda 捕獲組

Go
尚方寶劍之說 2022-06-06 15:37:48
我使用了很多 c++,并且在使用它時我經(jīng)常使用 lambdas。Lambda 有[<capturing group>](<parameters>) -> <return type> {}.在 golang 我知道 lambdas 只是var lambda_exp = func(<parameter list>) <return type> {}但我怎樣才能復制捕獲組?
查看完整描述

1 回答

?
一只萌萌小番薯

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

C++ 有一大堆繁瑣的東西需要控制:

  • 捕獲了哪些變量

  • 他們的一生可能是怎樣的

  • 它們是按價值還是按參考捕獲的

等等。這些帶有大量復雜的規(guī)則,你作為程序員必須遵守;如果你不這樣做,你的代碼行為是未定義的。結(jié)果是只有 C++ 高手才能維護的非常不清晰的代碼,以及終身的工作保障。1

Go 缺乏所有這些復雜性。程序員被迫編寫清晰而簡單的代碼:不會讓讀者感到困惑的代碼。變量的生命周期由編譯器和運行時自動計算。

好吧,對我們程序員來說幸運的是,有一點復雜性。形式的循環(huán):

for i, item := range someslice {

    go func() {

        operateOn(i, &item)

    }()

}

只有一個名為 的(共享)變量item,因此每個生成的 goroutine 都在處理同一個項目,其值在每次循環(huán)時被覆蓋。這意味著你必須寫得不太清楚:


for i, item := range someslice {

    item := item

    go func() {

        operateOn(i, &item)

    }()

}

(注意這i不是問題,因為它的值只是它的值,而不是指針;我在下面再次使用它)或者:


for i, item := range someslice {

    go func(x T) {

        operateOn(i, &x)

    }(item)

}

在閉包內(nèi)的局部變量中正確捕獲項目。


1如果不是很明顯,我真的很高興 Go 代碼如此簡單明了。我對 C++ 編程的終身工作保障方面至少有點諷刺。在許多情況下,這些繁瑣的東西確實使 C++ 具有內(nèi)存效率并且不需要運行時 GC,但這只是一場噩夢。這就是為什么 Rust 的所有權模型存在的原因,但 Rust 需要一些時間來適應。


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

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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