func 关键字后的两个函数名称 - 它是什么?

最后一个函数怎么理解?为什么我们在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

    }

}


胡子哥哥
浏览 133回答 2
2回答

白猪掌柜的

这只是意味着该函数正在返回一个不带参数并返回整数的函数。那就是... func() int 你签名的一部分在说。您收到的错误是因为您 fmt.Println 无法打印函数。为了证明这一点,你可以看到如果你打电话,你会得到同样的错误,func main() {    fmt.Println(foo)}func foo() int {  return 1}如果你这样调用你的函数,可能会更清楚地看到发生了什么。func main() {    myIncrementer := incrementer()    fmt.Println(myIncrementer()) // Prints 1}你在哪里创建增量器,它是一个函数,然后调用返回 1 的函数函数。

凤凰求蛊

简单地说,由于incrementer()返回一个函数,它返回的函数也必须被调用。你可以这样做:functionFoo := incrementer() fmt.Println(functionFoo())或者这种简写的方式:fmt.Println(incrementer()())这实现了同样的事情,你只是立即执行返回的函数incrementer()。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go