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

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

golang 的“defer”如何捕獲閉包的參數(shù)?

golang 的“defer”如何捕獲閉包的參數(shù)?

Go
富國(guó)滬深 2021-06-03 10:47:38
這是我的代碼package mainimport "fmt"func main() {    var whatever [5]struct{}    for i := range whatever {        fmt.Println(i)    } // part 1    for i := range whatever {        defer func() { fmt.Println(i) }()    } // part 2    for i := range whatever {        defer func(n int) { fmt.Println(n) }(i)    } // part 3}輸出:012344321044444問題:第 2 部分和第 3 部分有什么區(qū)別?為什么第 2 部分輸出“44444”而不是“43210”?
查看完整描述

2 回答

?
阿波羅的戰(zhàn)車

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

'part 2' 閉包捕獲變量 'i'。當(dāng)閉包中的代碼(稍后)執(zhí)行時(shí),變量 'i' 具有它在 range 語(yǔ)句的最后一次迭代中的值,即。'4'。因此

4 4 4 4 4

輸出的一部分。

“第 3 部分”在其閉包中沒有捕獲任何外部變量。正如規(guī)格所說(shuō):

每次執(zhí)行“defer”語(yǔ)句時(shí),函數(shù)值和調(diào)用的參數(shù)都會(huì)像往常一樣評(píng)估并重新保存,但不會(huì)調(diào)用實(shí)際的函數(shù)。

所以每個(gè)延遲的函數(shù)調(diào)用都有不同的“n”參數(shù)值。它是執(zhí)行 defer 語(yǔ)句時(shí) 'i' 變量的值。因此

4 3 2 1 0

輸出的一部分,因?yàn)椋?/p>

...在周圍函數(shù)返回之前立即以 LIFO 順序執(zhí)行延遲調(diào)用 ...


需要注意的關(guān)鍵點(diǎn)是在 defer 語(yǔ)句執(zhí)行時(shí)沒有執(zhí)行'defer f()' 中的 'f()'

'defer f(e)' 中的表達(dá)式 'e' 在defer 語(yǔ)句執(zhí)行時(shí)被計(jì)算。


查看完整回答
反對(duì) 回復(fù) 2021-06-07
?
墨色風(fēng)雨

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

為了加深對(duì) 的理解,我想再舉一個(gè)例子,defer mechanish先按原樣運(yùn)行這個(gè)代碼段,然后切換標(biāo)記為 (A) 和 (B) 的語(yǔ)句的順序,然后自己看看結(jié)果。


package main


import (

    "fmt"

)


type Component struct {

    val int

}


func (c Component) method() {

    fmt.Println(c.val)

}


func main() {

    c := Component{}

    defer c.method()  // statement (A)

    c.val = 2 // statement (B)

}

我一直想知道在這里應(yīng)用什么是正確的關(guān)鍵字或概念??雌饋?lái)表達(dá)式c.method已被評(píng)估,從而返回一個(gè)綁定到組件“c”實(shí)際狀態(tài)的函數(shù)(例如獲取組件內(nèi)部狀態(tài)的快照)。我想答案不僅涉及defer mechanish如何funtions with value or pointer receiver工作。請(qǐng)注意,如果您將 func 命名method為 a ,則也會(huì)發(fā)生這種情況,pointer receiverdefer 會(huì)將 c.val 打印為 2,而不是 0。


查看完整回答
反對(duì) 回復(fù) 2021-06-07
  • 2 回答
  • 0 關(guān)注
  • 262 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號(hào)

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