为了理解动态期货清单:Scala
For comprehension Dynamic List of Futures : Scala
我正在尝试使用理解来执行系列期货清单。一个未来的输出成为下一个未来的输入。下面是示例代码。
for {
x <- plugins(0).execute(input)
y <- plugins(1).execute(x)
z <- plugins(2).excute(y)
} yield z
上面的代码更像是一个瀑布,每个插件(i)在一些输入上执行,并将输出传递给下一个插件。最后一个插件的输出就是最终的输出。
plugins 是一个 Seq of Plugin 对象。 execute方法returns一个Future。我想让上面的代码更通用,其中 Plugins 中的插件数量是动态的。我该如何实施它。
plugins.foldLeft(Future.successful(input)) { (resultFuture, plugin) =>
resultFuture.flatMap(plugin.execute(_))
}
这里用到了两个工具:foldLeft
and flatMap
查看这些链接,看看您是否了解这些函数的作用
Future.successful
只是将输入包装到 Future 中,这样我们就可以像对待所有其他中间结果一样对待它。下划线是 lambda 函数参数的快捷方式。另一种写那篇文章的方法是:resultFuture.flatMap { result => plugin.execute(result) }
.
我正在尝试使用理解来执行系列期货清单。一个未来的输出成为下一个未来的输入。下面是示例代码。
for {
x <- plugins(0).execute(input)
y <- plugins(1).execute(x)
z <- plugins(2).excute(y)
} yield z
上面的代码更像是一个瀑布,每个插件(i)在一些输入上执行,并将输出传递给下一个插件。最后一个插件的输出就是最终的输出。 plugins 是一个 Seq of Plugin 对象。 execute方法returns一个Future。我想让上面的代码更通用,其中 Plugins 中的插件数量是动态的。我该如何实施它。
plugins.foldLeft(Future.successful(input)) { (resultFuture, plugin) =>
resultFuture.flatMap(plugin.execute(_))
}
这里用到了两个工具:foldLeft
and flatMap
查看这些链接,看看您是否了解这些函数的作用
Future.successful
只是将输入包装到 Future 中,这样我们就可以像对待所有其他中间结果一样对待它。下划线是 lambda 函数参数的快捷方式。另一种写那篇文章的方法是:resultFuture.flatMap { result => plugin.execute(result) }
.