Repository files navigation
原文:ZIO Cheat Sheet
该表基于 ZIO 2.0.X (编写时为 2.0.10).
简单起见,所有环境参数都被省略了,但是所有的函数都可以使用 ZIO[R, E, A] 的形式来使用。
简单起见,函数参数名称都被省略了。此外,函数的参数类型通常比下面显示的要 “更通用”。
有一些函数对应的变体未在列表中提及,因为相关函数在概念上相似,只是在某些细节上有所不同。由于命名一致,通常可以举一反三。
除了基本效果类型 ZIO[R, E, A] 之外,其他的 ZIO
类型都被省略了。例如:ZStream[R, E, A], ZLayer[RIn, E, ROut], Fiber[E, A] 和 Ref[A]。
在该表中,E1 代表 E 的派生,但 E2 可以是任何错误类型。同样适用于 A 和 A1。
别名
全名
UIO[A]
ZIO[Any, Nothing, A]
IO[E, A]
ZIO[Any, E, A]
Task[A]
ZIO[Any, Throwable, A]
RIO[R, A]
ZIO[R, Throwable, A]
URIO[R, A]
ZIO[R, Nothing, A]
函数名
参数
输出
含义
ZIO.succeed
=> A
IO[Nothing, A]
创建成功返回 A 类型值的作用
ZIO.fail
=> E
IO[E, Nothing]
创建因为指定错误 E 而失败的作用
ZIO.interrupt
IO[Nothing, Nothing]
创建一个视为被打断的作用
ZIO.die
Throwable
IO[Nothing, Nothing]
程序以该错误失败,视为 defect,可以打断协程
ZIO.attempt
=> A
IO[Throwable, A]
执行代码块,捕获代码块的异常,并在成功时返回对应值,一般用于将外部作用包装为 ZIO 作用
ZIO.async
((IO[E, A] => Unit) => Unit) FiberId
IO[E, A]
将异步回调式的 API 转换为 ZIO 作用
ZIO.fromEither
Either[E, A]
IO[E, A]
将 Either[E, A] 转换为 ZIO 作用
ZIO.left
A
IO[Nothing, Either[A, Nothing]]
上面的左值变体
ZIO.right
B
IO[Nothing, Either[Nothing, B]]
上面的右值变体
ZIO.fromFiber
Fiber[E, A]
IO[E, A]
创建一个返回传入协程结果的作用
ZIO.fromFuture
ExecutionContext => Future[A]
IO[Throwable, A]
创建一个返回传入的 Future 结果的作用
ZIO.fromOption
Option[A]
IO[Option[Nothing], A]
将 Option[A] 转换为 ZIO 作用
ZIO.none
IO[Nothing, Option[Nothing]]
上面的无值变体
ZIO.some
A
IO[Nothing, Option[A]]
上面的有值变体
ZIO.fromTry
Try[A]
IO[Throwable, A]
将 Try[A] 转换为 ZIO 作用
ZIO.acquireReleaseWith
IO[E, A] (acquire) A => IO[Nothing, Any] (release) A => IO[E, B] (use)
IO[E, B]
将可以释放的资源包装到 ZIO 中,需要同时提供创建,使用和释放的函数
ZIO.when
Boolean IO[E, A]
IO[E, Option[A]]
当表达式的结果为真时,计算传入的作用,否则直接返回 none
ZIO.whenZIO
IO[E, Boolean] IO[E, A]
IO[E, Option[A]]
当作用的结果为真时,计算传入的作用,否则直接返回 none
ZIO.whenCase
A PartialFunction[A, IO[E, B]]
IO[E, Option[B]]
对传入值 A 进行模式匹配,并根据情况生成新作用
ZIO.whenCaseZIO
IO[E, A] PartialFunction[A, IO[E, B]]
IO[E, Option[B]]
对传入的作用的结果进行模式匹配,并根据情况生成新作用
ZIO.filter
Iterable[A] A => IO[E, Boolean]
IO[E, List[A]]
遍历传入列表,为每个元素计算一次作用结果,过滤所有结果为真的元素并包装为新的作用
ZIO.cond
Boolean A E
IO[E, A]
当表达式为真时,创建直接以传入结果返回的作用,否则创建直接以传入错误失败的作用
函数名
对象
参数
转换为
含义
map
IO[E, A]
A => B
IO[E, B]
转换作用内部的值
mapAttempt
IO[Throwable, A]
A => B
IO[Throwable, B]
转换作用内部的值,并将转换过程中产生的异常包装到 ZIO 的错误中
as
IO[E, A]
B
IO[E, B]
将结果替换为 B
asSome
IO[E, A]
IO[E, Option[A]]
将结果替换为 Some[A]
asSomeError
IO[E, A]
IO[Option[E], A]
将结果中的错误替换为 Some[E]
orElseFail
IO[E, A]
E2
IO[E2, A]
如果错误发生,直接替换为 E2
unit
IO[E, A]
IO[E, Unit]
将结果直接替换为 Unit
flatMap
IO[E, A]
A => IO[E1, B]
IO[E1, B]
为当前作用增加下一步
flatten
IO[E, IO[E1, A]]
IO[E1, A]
将嵌套作用,按照嵌套顺序执行外层内层各一次,并保留内层的结果
mapBoth
IO[E, A]
E => E2 A => B
IO[E2, B]
错误和结果都转换,无论结果是哪个
mapError
IO[E, A]
E => E2
IO[E2, A]
将结果中的错误转换为另一个错误
mapErrorCause
IO[E, A]
Cause[E] => Cause[E2]
IO[E2, A]
转换错误,并保留错误的原因
flatMapError
IO[E, A]
E => IO[Nothing, E2]
IO[E2, A]
转换错误为一个能够产生新错误的作用,并执行他来替换原错误
collect
IO[E, A]
E1 PartialFunction[A, B]
IO[E1, B]
对结果进行模式匹配,并返回转换后的结果;当值不满足任何模式时,以错误 E2 结束
sandbox
IO[E, A]
IO[Cause[E], A]
展开当前错误的原因
flip
IO[E, A]
IO[A, E]
将错误和返回值翻转
tap
IO[E, A]
A => IO[E1, _]
IO[E1, A]
在中途插入作用,并无视结果
tapBoth
IO[E, A]
E => IO[E1, _] A => IO[E1, _]
IO[E1, A]
在错误端和正确端都插入作用,并无视结果
tapError
IO[E, A]
E => IO[E1, _]
IO[E1, A]
在错误端插入作用,并无视结果
absolve
IO[E, Either[E, A]]
IO[E, A]
将左值类型与作用的错误类型相同的 Either 返回值展开
some
IO[E, Option[A]]
IO[Option[E], A]
提取 Option 中的值,并给错误套上 Option
head
IO[E, List[A]]
IO[Option[E], A]
提取 List 中第一个值,并给错误套上 Option
toFuture
IO[Throwable, A]
IO[Nothing, Future[A]]
转换作用为 Future,并把错误也扔到 Future 中
filterOrDie
IO[E, A]
A => Boolean Throwable
IO[E, A]
如果断言失败,作用直接以传入的错误失败
filterOrDieMessage
IO[E, A]
A => Boolean String
IO[E, A]
同上,以 RuntimeException + 传入信息的形式失败
filterOrElse
IO[E, A]
A => Boolean A => IO[E, A]
IO[E, A]
如果断言失败,生成并返回另一个作用
filterOrFail
IO[E, A]
A => Boolean E
IO[E, A]
如果断言失败,返回指定的错误
when
IO[E, A]
Boolean
IO[E, Option[A]]
当表达式为真时保留值,否则返回 None
unless
IO[E, A]
Boolean
IO[E, Option[A]]
当表达式为假时保留值,否则返回 None
函数名
对象
参数
输出
含义
ZIO.service
given Tag[A]
ZIO[A, Nothing, A]
获取对应环境类型的实例
provideEnvironment
ZIO[R, E, A]
ZEnvironment[R]
IO[E, A]
将环境传给作用
provideLayer
ZIO[R, E, A]
ZLayer[R0, E, R]
ZIO[R0, E, A]
将带有环境的层传给作用
函数名
参数
输出
含义
ZIO.config
Config[A]
IO[Config.Error, A]
从指定的配置提供者中读取配置
函数名
对象
参数
转换为
含义
either
IO[E, A]
IO[Nothing, Either[E, A]]
将错误和值包装到 Either
option
IO[E, A]
IO[Nothing, Option[A]]
将结果包装为 Some[A],错误视为 None
ignore
IO[E, A]
IO[Nothing, Unit]
忽略结果和错误,都转换为 Unit
exit
IO[E, A]
IO[Nothing, Exit[E, A]]
将错误转换为程序的退出值
<> (orElse)
IO[E, A]
IO[E2, A1]
IO[E2, A1]
在出错时替换为传入的作用
orElseEither
IO[E, A]
IO[E2, B]
IO[E2, Either[A, B]]
在出错时,计算传入的作用,成功则返回 Right[B],原作用成功则返回 Left[A]
fold
IO[E, A]
E => B A => B
IO[Nothing, B]
将值和错误都转换为统一类型 B
foldZIO
IO[E, A]
E => IO[E2, B] A => IO[E2, B]
IO[E2, B]
将值和错误都转换为新作用
foldCauseZIO
IO[E, A]
Cause[E] => IO[E2, B] A => IO[E2, B]
IO[E2, B]
将值和错误的原因都转换为新作用
catchAll
IO[E, A]
E => IO[E2, A1]
IO[E2, A1]
捕获错误并转换为新作用
catchAllCause
IO[E, A]
Cause[E] => IO[E2, A1]
IO[E2, A1]
捕获错误原因并转换为新作用
catchSome
IO[E, A]
PartialFunction[E, IO[E1, A1]]
IO[E1, A1]
对错误进行模式匹配,从而只处理指定类型的错误
retry
IO[E, A]
Schedule[E, S]
IO[E, A]
对错误进行重试
eventually
IO[E, A]
IO[Nothing, A]
忽略错误并重试该作用直到作用成功
函数名
对象
参数
输出
含义
orDie
IO[Throwable, A]
IO[Nothing, A]
将作用的错误视为 defect
orDieWith
IO[E, A]
E => Throwable
IO[Nothing, A]
将作用的错误转换为其他异常并视为 defect
refineOrDie
IO[Throwable, A]
PartialFunction[Throwable, E2]
IO[E2, A]
将一部分错误值包装为新的错误,并将未处理的错误视为 defect
refineOrDieWith
IO[E, A]
PartialFunction[E, E2] E => Throwable
IO[E2, A]
将一部分错误值包装为新的错误,并将未处理的错误转换为其他异常后视为 defect
函数名
对象
参数
输出
含义
ZIO.foldLeft
Iterable[A] S (S, A) => IO[E, S]
IO[E, S]
按集合顺序以每两个作用的结果为参数计算,并最终得到一个作用
ZIO.foreach
Iterable[A] A => IO[E, B]
IO[E, List[B]]
按集合顺序依次以每个作用的结果为参数计算,并保留其结构
ZIO.foreachPar
Iterable[A] A => IO[E, B]
IO[E, List[B]]
并行地以集合中每个作用的结果为参数计算,保留结构但不保证顺序
ZIO.collectAll
Iterable[IO[E, A]]
IO[E, List[A]]
依次执行一组作用,并将结果放在原集合类型中返回
ZIO.collectAllPar
Iterable[IO[E, A]]
IO[E, List[A]]
并行执行一组作用,并将结果放在原集合类型中返回,不保证顺序
ZIO.forkAll
Iterable[IO[E, A]]
IO[Nothing, Fiber[E, List[A]]]
将集合中的每个作用都转换为协程,按原顺序返回转换后的协程对象
fork
IO[E, A]
IO[Nothing, Runtime[E, A]]
将单个作用转换为协程
<*> (zip)
IO[E, A]
IO[E1, B]
IO[E1, (A, B)]
将两个作用绑定顺序执行,并返回全部值
*> (zipRight)
IO[E, A]
IO[E1, B]
IO[E1, B]
将两个作用绑定顺序执行,丢弃前一个值
<* (zipLeft)
IO[E, A]
IO[E1, B]
IO[E1, A]
将两个作用绑定顺序执行,只保留前一个值
<&> (zipPar)
IO[E, A]
IO[E1, B]
IO[E1, (A, B)]
同时执行两个作用
&> (zipParRight)
IO[E, A]
IO[E1, B]
IO[E1, B]
同时执行两个作用,只保留第二个值
<& (zipParLeft)
IO[E, A]
IO[E1, B]
IO[E1, A]
同时执行两个作用,只保留第一个值
race
IO[E, A]
IO[E1, A1]
IO[E1, A1]
同时执行两个作用,只保留最先返回的值,并立刻打断另一个作用
raceAll
IO[E, A]
Iterable[IO[E1, A1]]
IO[E1, A1]
与另一组作用同时执行,只保留最先返回的值,并立刻打断其他所有作用
raceEither
IO[E, A]
IO[E1, B]
IO[E1, Either[A, B]]
同时执行两个作用,以 Either 的形式保留最先返回的值
函数名
对象
参数
输出
含义
ensuring
IO[E, A]
UIO[_]
IO[E, A]
一旦原作用开始执行,传入的作用就一定会执行,无论原作用成功失败还是被打断
onError
IO[E, A]
Cause[E] => UIO[_]
IO[E, A]
在原作用失败时,生成并执行新作用,新作用不会被打断
onInterrupt
IO[E, A]
UIO[_]
IO[E, A]
在原作用被打断时,执行新作用
onTermination
IO[E, A]
Cause[Nothing] => UIO[_]
IO[E, A]
当原作用因为 defect 或被打断而终结时,生成并执行新作用
函数名
对象
参数
输出
含义
ZIO.never
IO[Nothing, Nothing]
创建一个永远不会结束且什么也不做的作用
ZIO.sleep
Duration
IO[Nothing, Unit]
创建一个等待一段时间的作用
delay
IO[E, A]
Duration
IO[E, A]
使作用延迟一段时间后执行
timeout
IO[E, A]
Duration
IO[E, Option[A]]
给作用增加超时时间
timed
IO[E, A]
IO[E, (Duration, A)]
一并返回该作用的值和执行时间
forever
IO[E, A]
IO[E, Nothing]
无限循环执行当前作用
repeat
IO[E, A]
Schedule[A, B]
IO[E, B]
按照配置重复执行当前作用
repeatUntil
IO[E, A]
A => Boolean
IO[E, A]
重复执行当前作用,直到作用结果满足断言
repeatWhile
IO[E, A]
A => Boolean
IO[E, A]
当作用结果满足断言时,重复执行当前作用
函数名
参数
输出
ZIO.log
String
IO[Nothing, Unit]
ZIO.logFatal
String
IO[Nothing, Unit]
ZIO.logError
String
IO[Nothing, Unit]
ZIO.logWarning
String
IO[Nothing, Unit]
ZIO.logInfo
String
IO[Nothing, Unit]
ZIO.logDebug
String
IO[Nothing, Unit]
ZIO.logTrace
String
IO[Nothing, Unit]
You can’t perform that action at this time.