【问题标题】:Scala For loop order 2 flatmapScala For循环顺序2平面图
【发布时间】:2018-10-03 19:11:00
【问题描述】:

我在 scala 中使用 for ..yield 来循环 Future[Try[A]] 类型的对象。 scala 中的 for .. yield 实现将允许我在一个 for 循环中对外部容器(Future)进行平面映射,在一个嵌套循环中对内部容器(Try)进行平面映射。

for {_a <- a
    _b <- b
} yield {
    for {__a <- _a
        __b <- _b
    } yield {
        someOP(__a, __b)
    }
}

我一直在寻找一种在单个 for 循环中编写此代码的方法,可能类似于

for (__a <- a
     __b <- b
) yield {
    someOP(__a, __b)
}

或者可能是具有以下方法签名的某种遍历函数:

def traverse[G[_], F[_], A](z: F[G[List[A]]])(l: List[F[G[A]]]): F[G[List[A]]]

我确实意识到,如果我将F 的类型称为Future,将G 的类型称为Try,那么我可以简单地编写一个满足我要求的方法。但我正在寻找一种通用方法,可以说与OptionEither 一起使用,或者与在他们的类中定义的flatMap 操作类似,比如yield 的工作原理

【问题讨论】:

    标签: scala for-loop flatmap


    【解决方案1】:

    所以你不能在 for 理解中混合一元上下文。

    你可以试试 Scalaz monad 转换器。

    Scalaz monad transformers

    【讨论】:

    • 这看起来几乎像一个仅链接的答案。能否请您详细说明一下,并提供解决具体问题的实际解决方案?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-21
    • 2023-03-08
    • 2021-12-03
    • 1970-01-01
    • 2023-04-02
    • 1970-01-01
    相关资源
    最近更新 更多