为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Go
胡子哥哥 2023-05-22 17:04:53
最后一个函数怎么理解?为什么我们在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 的函数函数。


查看完整回答
反对 回复 2023-05-22
?
凤凰求蛊

TA贡献1825条经验 获得超4个赞

简单地说,由于incrementer()返回一个函数,它返回的函数也必须被调用。你可以这样做:

functionFoo := incrementer()
fmt.Println(functionFoo())

或者这种简写的方式:

fmt.Println(incrementer()())

这实现了同样的事情,你只是立即执行返回的函数incrementer()


查看完整回答
反对 回复 2023-05-22
  • 2 回答
  • 0 关注
  • 132 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信