泛函编程(35)-泛函Stream IO:IO处理过程-IO Process

  • 时间:
  • 浏览:4

注意我门都 在以上代码中使用了PartialFunction来分解输入参数值。并且 我门都 有个Function : intFunction(i: Int): String

count |> exists {_ > 8000}。

{ case 0: "Zero"

  case None => ???

2、Emit(head: O,tail: Process[I,O] = Halt[I,O]()) 输出类型O元素head,进入下一情况报告tail,默认输出head后完成退出。

我门都 先尝试些简单的算法:

以上线程池池并好难理解。现在我门都 能不可不都可以兩个 编写IO避免一句话:proc1 |> proc2 |> proc3。

现在我门都 肯定能不可不都可以使用兩个 的表达式:

按照讨论题目,以上例子中Stream[I]被转变成Stream[O],而实现依据则是按照具体情况报告来挑选输出。

不过,什儿 Stream[String]就都在表层上没办法 容易得到的了。我门都 先把它放一放。

Await {

首先,我门都 先看一段较熟悉的IO线程池池:

Process[I,O]的类型款式如下:

注意:实在Process[I,O]的功能是把Stream[I]转变成Stream[O],但它绝都在Stream[I] => Stream[O]类型的函数,统统我在以上有一种情况报告中游走的情况报告机器(State Machine)。

    IO避免能不可不都可以说是计算机技术的核心。都在吗?使用计算机的目的统统假如它对输入数据进行运算后向我门都 输出计算结果。所谓Stream IO简单来说统统我对一串按序相这类型的输入数据进行避免后输出计算结果。输入数据源并且 是一串键盘字符、鼠标位置坐标、文件字符行、数据库纪录等。如可实现泛函模式的Stream IO避免则是泛函编程不可或缺的技术。

以下代码例子能不可不都可以作为示范:

 Await {

注意以上代码中的避免依据:并且 过滤通过才emit,原封不动直接传递输入元素 I => I 用lift(identity)产生Process[I,I],用PartialFunction:

另外,能不可不都可以把兩个 Process的避免过程连接起来:兩个 Process避免并且 接着避免兩个 Process:

来分别避免并且 冒出 的输入参数值。

我门都 能不可不都可以定义它的PartialFunction:

能不可不都可以看出,Await情况报告代表了某个Process的功能。Emit统统我输出该Process对IO避免的结果。

以上例子里有几项是值得提倡的:使用完文件后及时关闭,避免资源流露、没办法 一次性将整个文件载入内存统统我逐行读取文件内容,节省内存资源。实在整个过程是包嵌在IO类型内,但操作代码直接产生副作用。很明显,起码IO避免过程是由非纯代码组成的,无法实现函数组合,既是无法实现泛函编程的通过重复使用组件灵活组合功能的特点了。能不可不都可以相像,我门都 在泛函Stream IO编程中并且 通过一些细小组件的各式组合来实现多样性的IO计算功能。

每个Process[I,O]都并且 占据 有一种情况报告之一:

}

我门都 现在能不可不都可以先分析一下泛函Stream IO编程原理。泛函编程的精髓统统我把兩个 线程池池分解成一些纯代码组件,因此通过各种搭配组合来实现线程池池整体功能。没办法 对于Stream IO计算我门都 希望能先实现哪些纯代码的基本组件因此把它们组合起来。我门都 能不可不都可以把Stream IO避免过程想象成连成一串的电视信号避免盒子:每个盒子具备一项信号转换并且 过滤功能,我门都 将兩个 盒子的输出端子接入兩个 盒子的输入端子使信号能不可不都可以经过一连串的避免过程最终输出我门都 要求的信号。我门都 能不可不都可以用兩个 IO避免过程代表兩个 信号转换盒子。它的款式是兩个 的;Process[I,O]。最终的IO线程池池统统我一连串Process[I,O]。当然,第兩个 Process[I,O]的输入端要能 连接兩个 Stream,而最后兩个 则接在兩个 实体的设备。我门都 先不管这两头,先从Process[I,O]的功能着手,使其要能连成一串并把输入类型I转变成输出类型O。

1、Halt() 停止避免IO,退出。

 case None => ???

当然我门都 还没办法 结速英语 讨论什儿 管道两头的数据源。并且 我门都 要分开独立讨论它。

为了实现函数组合(functional composition),我门都 要能 想依据把兩个 Process像接水管一样连接起来:一头的输出是另一头的输入(function fusion):

以上代码充分显示了我门都 所追求的泛函编程模式:简洁、灵活、优雅。

3、Await(rcvfn: Option[I] => Process[I,O]) 听候兩个 类型I元素输入,避免IO,返回Process类型结果

  case Some(i) => 

下面是一组Process的基本依据和组件:

并且 Await(iproc)中的iproc >>> Option[I] => Process[I,O], PartialFunction是Function的子类统统我门都 能不可不都可以写成:

 case Some(i) => ???

}

实际上我门都 想使用以下模式的表达式:

   case 10: "Ten" }

下面是以上示范代码汇总: