6-2 函数式编程例一

佐手、 提交于 2020-02-03 03:39:29

package main

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

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

type intGen func() int

//实现interface
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)
    // TODO: incorrect if p is too small!
    return strings.NewReader(s).Read(p)
}

func printFileContents(reader io.Reader) {
    scanner := bufio.NewScanner(reader)

    for scanner.Scan() {
        fmt.Println(scanner.Text())
    }
}

func main() {
    f := fibonacci()
    fmt.Println(f())
    fmt.Println(f())
    fmt.Println(f())

    printFileContents(f)
}

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!