代码之家  ›  专栏  ›  技术社区  ›  konquestor

了解动态期货列表:Scala

  •  1
  • konquestor  · 技术社区  · 9 年前

    我正试图用以理解执行系列期货清单。一个未来的输出变成了下一个将来的输入。下面是示例代码。

    for {
          x <- plugins(0).execute(input)
          y <- plugins(1).execute(x)
          z <- plugins(2).excute(y)
        } yield z
    

    上面的代码更像瀑布,每个插件(i)在一些输入上执行,并将输出传递给下一个插件。最后一个插件的输出是最终输出。 plugins是一个Seq of Plugin对象。execute方法返回Future。我想让上面的代码更通用,因为插件中的插件数量是动态的。我该如何实施它。

    1 回复  |  直到 9 年前
        1
  •  6
  •   Basit Anwer    9 年前
    plugins.foldLeft(Future.successful(input)) { (resultFuture, plugin) =>     
      resultFuture.flatMap(plugin.execute(_))
    }
    

    这里使用了两种工具: foldLeft flatMap

    看看这些链接,看看你是否了解这些函数的作用

    Future.successful 只需将输入包装到一个Future中,这样我们就可以像对待其他中间结果一样对待它。Undercore是lambda函数参数的快捷方式。写这篇文章的另一种方法是: resultFuture.flatMap { result => plugin.execute(result) } .