最后一个函数怎么理解?为什么我们在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 关注
- 132 浏览
添加回答
举报
0/150
提交
取消