2.3 zio入门——一些常见的zio操作符
2.3 其他的一些順序操作符
按順序組合是functional effect 最基本的操作,ZIO提供了各種相關(guān)的運(yùn)算符來滿足通用需求。
zipWith
最基本的是zipWith,它將順序地合并兩個effect,并且可以讓用戶指定函數(shù)來作為回調(diào)函數(shù)處理兩個結(jié)果。
例如,如果我們有兩個effect提示用戶的名字和姓氏,那么我們可以使用zipWith將這些effect按順序組合在一起,將其結(jié)果合并為一個字符串:
zipWith運(yùn)算符的功能不如flatMap強(qiáng)大,因為它不允許第二個effect依賴第一個effect,即使該運(yùn)算符仍然描述了從左到右的順序合成。
zip,zipLeft,zipRight
其他變體包括:
zip,順序地將兩個effect的結(jié)果組合成結(jié)果的元組。
zipLeft,順序地合并兩個effect,并返回第一個的結(jié)果;
zipRight,依次組合兩個effect并返回第二個結(jié)果。
有時,您會看到<*用作zipLeft的別名,而*>用作zipRight的別名。 當(dāng)你不需要所有effect的結(jié)果,這些運(yùn)算符就特別有用。
例如,在以下代碼段中,我們順序組合兩個effect,返回右手effect的Unit成功值:
在上面的例子里,*>非常有用,我們希望程序按順序執(zhí)行,但是左邊的effect返回一個Unit,這個返回值并沒有什么作用。
foreach,collectAll
foreach運(yùn)算符返回單個effect,描述了按順序?qū)系拿總€元素執(zhí)行作用。 它類似于過程編程中的for循環(huán),它對值進(jìn)行迭代,以某種方式處理它們并收集結(jié)果。
例如,我們可以創(chuàng)建一個effect來描述如何打印1到100之間的所有整數(shù),如下所示:
同樣,collectAll返回一個effect,該effect收集整個effect集合的結(jié)果。 我們可以使用它來收集多種print effect的結(jié)果,如以下代碼片段所示:
val prints = List( printLine("The"),printLine("quick"),printLine("brown"),printLine("fox") )val printWords = ZIO.collectAll(prints)到目前為止,您只要掌握了所學(xué)的知識,就可以將任何程序程序轉(zhuǎn)換為ZIO程序. 只需要將要執(zhí)行的內(nèi)容包裝在effect構(gòu)造函數(shù)中,然后將它們與flatMap組合在一起。
如果僅此而已,您將不能充分利用ZIO必須提供的所有功能,但這是一個起點,并且在將舊代碼遷移到ZIO時可以是一種有用的技術(shù)。
總結(jié)
以上是生活随笔為你收集整理的2.3 zio入门——一些常见的zio操作符的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Python与OpenCV(二)——基于
- 下一篇: 红糖水白糖水的转换--郝汉森