Golang Go语言中初学,请教一个关于闭包的问题。
看来是我搜索引擎用的不够好...
正题:做 Go 的入门指导的时候,有一个需要用闭包解决的斐波那契数
用 tour 中给的结构,很容易搞定了。。
package main
import “fmt”
func main() {
f := fibonacci()
for i := 0; i < 10; i++ {
fmt.Println(f())
}
}
func fibonacci() func() int {
a,b := 0,0
return func () int{
if b<2{
a=b
b++
return b
}else{
//给 a 赋值
a=a+b
//交换 a b 值
a=a+b
b=a-b
a=a-b
return b
}
}
}
然后我想试试把函数体直接放在 main()中试试
package main
import “fmt”
func main() {
f := func() int {
a,b := 0,0
return func () int{ //这里报错 cannot use func literal (type func() int) as type int in return argument
if b<2{
a=b
b++
return b
}else{
//给 a 赋值
a=a+b
//交换 a b 值
a=a+b
b=a-b
a=a-b
return b
}
}
}
for i := 0; i < 10; i++ {
fmt.Println(f)
}
}
这里想请教一下,是我对闭包理解错了。。。还是这里写错了
多谢!
Golang Go语言中初学,请教一个关于闭包的问题。
更多关于Golang Go语言中初学,请教一个关于闭包的问题。的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
…果然是我写错了<br>f := func() func() int {}<br>
这样才应该是返回一个函数
更多关于Golang Go语言中初学,请教一个关于闭包的问题。的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
package main
import "fmt"
func main() {
f := func() func() int {
a,b := 0,0
return func () int{
if b<2{
a=b
b++
return b
}else{
//给 a 赋值
a=a+b
//交换 a b 值
a=a+b
b=a-b
a=a-b
return b
}
}
}
ff := f()
for i := 0; i < 10; i++ {
fmt.Println(ff)
}
}
楼主的意思应该是这样的吧
嗯,是的,这样是能调用匿名函数了。但是我搞不明白为什么输出的是内存地址。。。
你的闭包返回的是一个 func() int 类型的值,而你的斐波拉那个函数的返回值是 int,你觉得是一个类型?
多谢!<br>for i := 0; i < 10; i++ {<br> fmt.Printf("type:%T value:%v\n",ff(),ff())<br> }<br>
会有什么奇怪的 BUG 么?
哦,溢出。。。。
交换直接 a, b = b, a 就行了
返回地址应该是执行 f 返回的匿名函数 func() int 的地址