簡體   English   中英

Golang:函數的多個返回值的范圍

[英]Golang: Scope of multi return values from function

當一個函數在Golang中返回多個變量時,這些變量的作用域是什么? 在所附的代碼中,我無法確定b的范圍。

package main

import (
    "fmt"
)

func addMulti(x, y int) (int, int) {
    return (x + y), (x * y)
}

func main() {
    //what is the scope of the b variable here?
    a, b := addMulti(1, 2)

    fmt.Printf("%d %d\n", a, b)

    //what is the scope of the b variable here?
    c, b := addMulti(3, 4)

    fmt.Printf("%d %d\n", c, b)

}   

我們不是在談論函數的返回值的范圍,而是在您將返回值分配給的變量的范圍。

從您聲明變量的角度出發,變量b范圍是函數主體。

首先,您可以在此行執行此操作:

a, b := addMulti(1, 2)

但是,然后在此行使用另一個Short Variable聲明

c, b := addMulti(3, 4)

由於已經聲明了b因此只為其分配了一個新值。 b將一直保持作用域,直到main()函數結束。 引用Go語言規范:

與常規變量聲明不同,短變量聲明可以重新聲明變量,前提是它們最初是在同一塊中以相同類型早先聲明的,並且至少一個非空白變量是新變量。 因此,重新聲明只能出現在多變量簡短聲明中。 重新聲明不會引入新變量; 它只是為原始值分配一個新值。

這是一個塊內的普通變量。 規格

在函數內部聲明的常量或變量標識符的范圍始於ConstSpec或VarSpec的末尾(對於簡短變量聲明,為ShortVarDecl),並終止於最里面的包含塊的末尾。

在第二個調用中,您只是重新分配了相同的b變量的值。 其范圍是相同的。

b變量的范圍是main.main() 在第二個分配c, b := addMulti(3, 4)引入新變量c,並分配在第一次分配中引入的變量b。 如果將第二個賦值更改為a, b := addMulti(3, 4)與第a, b := addMulti(3, 4)賦值相同,它不想編譯。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM