这可能是一个愚蠢的问题,但从 ZIO 开始,我无法设法将 a 转换Seq[ZIO]为ZIO[Seq]:
def translate(keys: Seq[String], locales: Seq[Locale]):RIO[Translator, Seq[Translation]] = {
for {
service <- ZIO.environment[Translator]
} yield {
// service.translate produce a zio.Task[Translation]
keys.map(k => service.translate(k, locales)
}
}
Run Code Online (Sandbox Code Playgroud)
必需:RIO[翻译器,Seq[翻译]]
找到:ZIO[翻译器,无,Seq[zio.Task[翻译]]
我尝试过,flatMap但是flatten我无法与任何人取得预期的结果。collectAllmerge
如何将 a 转换Seq[ZIO[_, _, B]]为 a ZIO[_, _, Seq[B]]?
谢谢
编辑:这似乎ZIO.foreach是最好的选择,但是由于 for 理解,我仍然将它包裹在另一个 ZIO 中。
fra*_*isr 10
因为 for 循环会转换为flatMap除了最后一行 a 之外的内容map,所以您需要在for 循环中foreach添加调用。
def translate(keys: Seq[String], locales: Seq[Locale]): RIO[Translator, Seq[Translation]] = {
for {
translator <- ZIO.environment[Translator]
translations <- ZIO.foreach(keys)(translator.translate(_, locales))
} yield translations
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2081 次 |
| 最近记录: |