关于intGen和printFileContents
来源:7-2 函数式编程例一

万通筋骨创可贴
2020-11-23
在自定义类型里面,讲了扩展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是一个比较底层的函数,我们一般不会直接调用,而是通过其他库的帮助。
也感谢同学的建议,这一点在视频里的确有所遗漏。
012020-11-24 -
ccmouse
2020-11-24
我加了一个锚点,详细的分析了一下。
https://coding.imooc.com/lesson/180.html#mid=10840
00
相似问题