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

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

在不同范圍內(nèi)使用多個(gè)同名變量是否有合理的用例?

在不同范圍內(nèi)使用多個(gè)同名變量是否有合理的用例?

Go
海綿寶寶撒 2022-12-19 21:05:21
以下(設(shè)計(jì)的)代碼定義了變量 i 的兩次出現(xiàn)或“實(shí)例”:import "fmt"func main() {    goto_done := false    i := 3fred:    fmt.Printf("i #1 = %d\n", i)    if !goto_done {        i := 4        fmt.Printf("i #2 = %d\n", i)        goto_done = true        goto fred    }}從輸出中可以看出,這兩個(gè)值都作為單獨(dú)的值存在,因?yàn)槎x第二個(gè)值不會(huì)覆蓋第一個(gè)值:i #1 = 3i #2 = 4i #1 = 3此功能是否有任何建設(shè)性的用例,或者它只是語言的一個(gè)怪癖?
查看完整描述

1 回答

?
慕仙森

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

以下是一些用例:


1.關(guān)閉

Go 有閉包,這意味著你可以創(chuàng)建一個(gè)引用封閉變量的匿名函數(shù)。閉包有很多很好的用途,但這意味著匿名函數(shù)會(huì)繼承它們的封閉變量名。


err := trySomething()


workChan := make(chan work)


// start a worker

go func() {

    // we're using the existing workChan from the enclosing scope

    for job := range workChan {

        //  vv this is name shadowing! (we're shadowing the existing err)

        err := do(job)

        if err != nil {

            logError(err) 

        }

    }

}()


err = tryAnotherThing()

if err != nil {

    return err

}


如果我們不能隱藏名稱,那么工作線程和主線程將競爭使用同一個(gè)err變量(導(dǎo)致未定義的行為)。因此,您可以感謝陰影,因?yàn)槟槐劓I入err2、errr等。


2. 在封閉范圍內(nèi)添加新名稱

假設(shè)你有一個(gè)現(xiàn)有的包,你想添加一個(gè)新的全局常量或變量,名為gopher. 您不想搜索整個(gè)包源中的每個(gè)范圍以查看該名稱gopher是否已在任何地方使用。


在Go 1.18版本中,添加了兩個(gè)新的預(yù)聲明標(biāo)識符:any和comparable。由于允許名稱隱藏,因此可以將像這樣的通用標(biāo)識符添加到 Go 而不會(huì)破壞以前正確的 Go 程序(另請參見Go 1 兼容性聲明)


3.粘貼代碼

Shadowing 允許您像這樣復(fù)制和粘貼“自包含”代碼,并使其在您放置的任何地方(幾乎)都能正常工作。


// Print Fibonacci numbers

for i, j := 0, 1; j < 100; i, j = j, i+j {

    fmt.Println(j)

}

i并且j是非常常見的變量名稱,因此如果不允許隱藏,則如果您嘗試將其粘貼到代碼中的某處,很可能會(huì)發(fā)生沖突,從而導(dǎo)致錯(cuò)誤。


當(dāng)然,通常最好避免隱藏,因?yàn)樗鼤?huì)導(dǎo)致意想不到的錯(cuò)誤并降低代碼的可讀性(尤其是在沒有 IDE 中可能會(huì)出現(xiàn)的范圍感知突出顯示的情況下)。在更長、更現(xiàn)實(shí)的場景中,您可能想要重命名您可能粘貼的任何陰影名稱。值得慶幸的是,陰影在語言中是有效的,它實(shí)際上應(yīng)該更容易重命名它們:


由于i和j是有效且不同的變量,一個(gè)好的 IDE 應(yīng)該允許您像對待任何其他變量一樣快速重命名這些變量及其所有用法。


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

添加回答

舉報(bào)

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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