老师我这里有点疑惑,可以麻烦解惑吗
来源:7-2 函数式编程例一

gsdad_white
2020-04-01
老师我有下面三个问题,可以麻烦解答一下吗
在main中调用 printFileContent时
1. printFileContent接收的参数为 reader io.Reader ,我们能使用 fibonacci() 作为参数传入的原因是因为 fibonacci() 函数的返回值为intGen,且intGen实现了Reader。所以我们才能将 fibonacci() 作为参数传入吗?
2. 在 printFileContent 中的 newReader.Scan() ,实际上到底读取到的是什么呢?是每次调用intGen返回的 int 值吗?
3. 我通过 debug 发现 newReader.Text() 被调用时,在 scan.go 中的 213 line中才会调用,请问 我们实现的Read真的是在这里才会被调用吗?其他地方有触发吗?
写回答
1回答
-
ccmouse
2020-04-06
Scan在执行的时候会调用到Read。Read的作用是把读到的内容写入传进来的这个参数p []byte。返回的n是写入的字节数。具体在哪里调用到Read,我们不用关心,我们只要实现了Read函数,就能使用这个Scanner,因为它的参数是io.Reader。
想知道的话的确通过调试器是很好的方法。同学可以把断点设在我们写的Read函数的第一行,就能看到这个Scanner是怎么调用Read了。当然,地方不止一处,想要知道所有地方,就要靠搜索代码了。
00