如何理解最后一个功能?
为什么在func
声明之后使用不同的函数名?
如何使用这些功能?像main
函数中所示的那样使用它是错误的。
package main
import (
"fmt"
)
func main() {
fmt.Println(incrementer()) //error
}
func incrementer() func() int { //what is it?!
i := 0
return func() int {
i++
return i
}
}
答案 0 :(得分:6)
这仅表示该函数正在返回不带参数且返回整数的函数。就是
... func() int
您的部分签名是说
您得到的错误是因为fmt.Println无法打印功能。为了显示这一点,您可以看到在调用
时遇到相同的错误func main() {
fmt.Println(foo)
}
func foo() int {
return 1
}
如果这样调用函数,可能会更清楚看到发生了什么事情。
func main() {
myIncrementer := incrementer()
fmt.Println(myIncrementer()) // Prints 1
}
在创建增量器(即函数)的地方,然后调用该函数返回1。
答案 1 :(得分:4)
由于incrementer()
返回一个函数,因此它返回的函数也必须被调用。您可以这样做:
functionFoo := incrementer()
fmt.Println(functionFoo())
或者这种简陋的方式:
fmt.Println(incrementer()())
达到相同的目的后,您只需立即执行incrementer()
返回的功能。