首页 > 其他 > 详细

函数式编程

时间:2019-12-19 19:50:15      阅读:91      评论:0      收藏:0      [点我收藏+]
package main

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

type intGen func() int  //正规的函数式编程都是先定义函数类型

func fibonacci() intGen {  //声明一个返回intGen类型的斐波那契生成器
    a, b := 0, 1
    return func() int {
        a, b = b, a+b
        return a
    }
}
func (g intGen) Read(p []byte) (n int, err error) { //为函数实现io.Reader的Read接口
    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的方法所以可以将函数直接传入
    scanner := bufio.NewScanner(reader)
    for scanner.Scan() {
        fmt.Println(scanner.Text())
    }
}

func main() {
    f := fibonacci()
    printFileContents(f)
}




函数式编程

原文:https://www.cnblogs.com/hualou/p/12069714.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!