package main
import "fmt"
// fibonacci is a function that returns
// a function that returns an int.
func fibonacci() func() int {
a, b := 0, 1
return func() int {
defer func() {a, b = b, a + b}()
return a
}
}
func main() {
f := fibonacci()
for i := 0; i < 10; i++ {
fmt.Println(f())
}
}
有人可以解释为什么输出从 0, 1, 1, 2, 3, 5 .... 而不是 1, 1, 2, 3, 5, ..... 开始吗?
据我了解, defer 会在 return 语句之前执行,这意味着 a、b 已经更新为 1、1 并且应该返回 1?也许它与表达式被评估或绑定的时间有关,也许返回已经将 a 绑定为 0 然后在返回之前检查是否存在 defer 语句?
go 中的任何内部代码参考都会非常有帮助。
编辑 1:这是我在了解延迟后尝试的练习https://go.dev/tour/moretypes/26 。
繁华开满天机
素胚勾勒不出你
相关分类