-2
考慮下面的函數:閉包中去:在命名返回值不同的輸出
func main() {
var a int = 3
sum := func() {a = a*2}
sum()
sum()
fmt.Println(a) // returns 12
}
但是:
func main() {
var a int = 3
sum := func() (a int) {a = a*2; return}
sum()
sum()
fmt.Println(a) // returns 3
}
我不能完全理解這種行爲的邏輯:爲什麼它會回到老值a
後a = a*2
*我不能完全理解這種行爲*邏輯:你遮蔽變量'了';這有什麼困惑? –
@TimCooper:Go的返回值可以被命名。如果是這樣,他們被視爲在函數頂部定義的變量。「這說明問題。這不是意識形態的封閉行爲。 –