请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

关于intGen和printFileContents

在自定义类型里面,讲了扩展Read方法,但是到mian方法运行的时候,又用的printFileContents这个函数,但是intGen和printFileContents是怎么联系一起的,好像没有说明名,我寻思得在前面声明个接口什么的,等到最后也没有,但是居然能运行,求教一下老师,这两个函数是怎么联系在一起的,
还有就是照着视频里的代码去敲,报
cannot use f (type func() int) as type io.Reader in argument to printFileContents: func() int does not implement io.Reader (missing Read method)
下面是我的代码:

package main

import (
   "bufio"
   "fmt"
   "io"
   "strings"
)

func fibonacci() func() int{
   a,b :=0,1
   return func() int{
   	a,b = b,a+b
   	fmt.Println(a)
   	return a
   }
}
type intGen func() int

func (g intGen) Read(p []byte) (n int,err error){
   next:=g()
   if next>10000{
   	return  0,io.EOF
   }
   s:=fmt.Sprintf("%d\n",next)
   return strings.NewReader(s).Read(p)
}

func printFileContents(reader io.Reader){ //这里io.Reader改成 intGen就可以,我的go版本是1.15
   scanner := bufio.NewScanner(reader)
   for scanner.Scan(){
   	fmt.Println(scanner.Text())
   }
}
func main(){
   f:= fibonacci()
   printFileContents(f)
}


正在回答

2回答

同学这样的改法也可以。我在视频里让func fibonacci()返回了intGen,而不是func() int。

这里的关键在于Scanner,它会帮助我们去调用Read函数。Read是一个比较底层的函数,我们一般不会直接调用,而是通过其他库的帮助。

也感谢同学的建议,这一点在视频里的确有所遗漏。

0 回复 有任何疑惑可以回复我~
ccmouse 2020-11-24 20:52:34

我加了一个锚点,详细的分析了一下。

https://coding.imooc.com/lesson/180.html#mid=10840

0 回复 有任何疑惑可以回复我~
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信