彩神排列三_神彩排列三官方

泛函编程(37)-泛函Stream IO:通用的IO处理过程-Free Process

时间:2019-12-24 04:37:45 出处:彩神排列三_神彩排列三官方

  在上两篇讨论中亲戚亲戚大家介绍了IO Process:Process[I,O],它的工作原理、函数组合等。很容易想象,另一个 多 完正的IO系统系统进程是由 数据源+处里过程+数据终点: Source->Process->Sink所组成的。亲戚亲戚大家发现:Process[I,O]某种生活是无法兼顾Source和Sink的功能。而独立附加的Source和Sink又无法有效地与Process[I,O]进行函数组合(functional composition)。

Source和Sink类型的实际应用介绍将在下期“IO过程实际应用-IO Process in action”中具体讨论。

以上组件都会过滤输出O的。

作为另一个 多 安全可用的IO类型,亲戚亲戚大家先设计或多或少Process[F,O]的基本组件:

Tee类型只是我另一个 多 两头输入的IO Process类型,左边非要否输入I,右边非要否输入I2。

注意:组件实现中的写法和时候 Process[I,O]的一样,只不过这次亲戚亲戚大家的返回类型是Process1[I,O]。

另一个 多 完正的IO系统系统进程还才能包括对数据源Source和数据终点Sink的操作,很难 Process[F,O]可非要否代表数据源(Source)类型呢?亲戚亲戚大家来看看Process[F,O]的读取Await: 

亲戚亲戚大家下面再看看数据终点Sink与Process[F,O]的关系。亲戚亲戚大家希望通过Process[F,O]类型实现输出功能,也只是我把Source的输入发送给Sink。亲戚亲戚大家用以下方式代表Sink:

亲戚亲戚大家同样还才能重新定义那些构建Tee的基本组件:

这个新的类型代表能产生一连串的O类型元素。亲戚亲戚大家还才能把它当作List[O]来编写组件。重要的是亲戚亲戚大家现在还才能通过运算F[A]来与外界联系,如:读取文件或数据库内容。运算F[A]返回的数据经过rf函数的处里后转入新的情形:正常完成数据输入时运行fb进入新情形、而且输入数据过程中产生异常则运行fl清理战场,释放资源。亲戚亲戚大家而且改善了Halt,使之返回终止情形信息。很难 一来Process从整体上更透明,更安全。更重要的是Process还才能拓展了(extensible)。

亲戚亲戚大家只还才能考虑下游p等待输入await一起上游this正在发送emit这个个多 情形实现对接。其它情形则等它们或多或少人调整对口后再对接。

  实际上Process[I,O]是某种生活固定单一输入类型(single input process):单一是指Process[I,O]只接收I类型输入、固定是指它对外界沟通方式是固定的:非要Halt,Emit,Await某种生活情形。这个情形愿因了Process[I,O]无法成为有效的IO系统系统进程组件以及亲戚亲戚大家还才能尝试开发更概括更通用的IO Process。亲戚亲戚大家来看个新的IO类型形态:Process[F[_],O]

而且亲戚亲戚大家把F[A]再加IO[A]:

亲戚亲戚大家还还才能通过Process[F,O]实现两头输入:就像字母T,输入从里边左右两头进入。

这个应该很难理解:Sink为输出O提供了一系列函数。那些函数接收输入参数O而且运行F,F只是我个运算不返回结果,如IO运算。

现在亲戚亲戚大家来到了IO Process对接最重要的组件导管(pipe |>)组件了:

现在亲戚亲戚大家再设计或多或少方便调用的帮助函数(helper functions):

有了这个|>后亲戚亲戚大家还才能把那些Process1组件对接到Process[F,O]上:

亲戚亲戚大家在运算Process时用Try来捕捉异常信息并返回到可控情形Halt(err),而且亲戚亲戚大家还才能从返回情形了解终止情形 - End:正常终止,Kill:强行终止及Throwable:存在异常终止。

首先,亲戚亲戚大家还是要重新塑造一下F[A],使它只容许左边I类,右边I2类输入:

  type Sink[F[_],O] = Process[F, O => F[Unit]] 

注意以上只是我示范了Process[IO,O]作为Process[F,O]的另一个 多 特殊实例是还才能实现从Source读取数据的。亲戚亲戚大家将在下个章节讨论具体的可行方案。

热门

热门标签