gpt4 book ai didi

scala - Zio,将 Seq[ZIO] 转换为 ZIO[Seq]

转载 作者:行者123 更新时间:2023-12-05 00:44:21 26 4
gpt4 key购买 nike

这可能是一个愚蠢的问题,但从 ZIO 开始,我无法将 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)
}
}

Required: RIO[Translator, Seq[Translation]]

Found : ZIO[Translator, Nothing, Seq[zio.Task[Translation]]

我尝试了 flatMapflattencollectAllmerge 但我无法得到预期的结果与任何人。

如何将 Seq[ZIO[_, _, B]] 转换为 ZIO[_, _, Seq[B]]

谢谢

编辑:似乎 ZIO.foreach 是最好的选择,但是由于 for 理解,我仍然将它包裹在另一个 ZIO 中。

最佳答案

因为除了最后一行是 map 之外,for 循环转换为 flatMap,所以您要添加 foreach 调用 for循环中。

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
}

关于scala - Zio,将 Seq[ZIO] 转换为 ZIO[Seq],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67301065/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com