最后一個函數怎么理解?為什么我們在func聲明后使用不同的函數名稱?如何使用這些功能?像main函數中顯示的那樣使用它是錯誤的。package mainimport ( "fmt")func main() { fmt.Println(incrementer()) //error}func incrementer() func() int { //what is it?! i := 0 return func() int { i++ return i }}
2 回答

白豬掌柜的
TA貢獻1893條經驗 獲得超10個贊
這只是意味著該函數正在返回一個不帶參數并返回整數的函數。那就是
... func() int
你簽名的一部分在說。
您收到的錯誤是因為您 fmt.Println 無法打印函數。為了證明這一點,你可以看到如果你打電話,你會得到同樣的錯誤,
func main() {
fmt.Println(foo)
}
func foo() int {
return 1
}
如果你這樣調用你的函數,可能會更清楚地看到發生了什么。
func main() {
myIncrementer := incrementer()
fmt.Println(myIncrementer()) // Prints 1
}
你在哪里創建增量器,它是一個函數,然后調用返回 1 的函數函數。

鳳凰求蠱
TA貢獻1825條經驗 獲得超4個贊
簡單地說,由于incrementer()
返回一個函數,它返回的函數也必須被調用。你可以這樣做:
functionFoo := incrementer() fmt.Println(functionFoo())
或者這種簡寫的方式:
fmt.Println(incrementer()())
這實現了同樣的事情,你只是立即執行返回的函數incrementer()
。
- 2 回答
- 0 關注
- 166 瀏覽
添加回答
舉報
0/150
提交
取消