取得下一个元素

来源:7-2 函数式编程例一

残天一月

2018-03-15

func (g intGen) Read(p []byte) (n int, err error) {
  next := g() //此处 在调用次g()之后就取得了下一个元素
  s := fmt.Sprintf("%d\n", next)
  if next > 1000000 {
     return 0, io.EOF
  }
  return strings.NewReader(s).Read(p)
}


如上 老师您好、你说的next:=g()就取得了下一个元素这句话我没搞懂、为什么调用之后就取得下一个元素了啊?

写回答

1回答

ccmouse

2018-03-16

因为g是intGen,就是认为每次调用它会取得下一个元素。比如我们示例里传给它的斐波那契数列生成器,用了闭包的概念,你看每次调用f都会生成下一个数。

0
1
残天一月
懂了、其实这应该是一个主观说法、我之前以为返回的函数本身就会取得下一个元素的、谢谢老师
2018-03-16
共1条回复

Google资深工程师深度讲解Go语言 由浅入深掌握Go语言

语法+分布式爬虫实战 为转型工程师量身打造

5995 学习 · 1909 问题

查看课程