我有一些嵌套调用 flatMap 的代码,如下所示:
foo.flatMap(implicit f => bar(123).flatMap(b =>
/* and so on... implicit f is still in scope here.*/
))
通常,人们会将其写为 for 理解,这使代码更具可读性:
for {
f <- foo
b <- bar(123)
/* yet more method calls that need f as an implicit parameter*/
}
但我需要f
隐含,我看不出用理解来做到这一点。有没有?当然我可以明确地传递 f,但这意味着再见漂亮的 DSL。我会对 Scala 2.9 和 2.10 的答案感兴趣。
为了清楚起见,我想做这样的事情,但它不会编译:
for {
implicit f <- foo
b <- bar(123) //bar takes implicit argument
/* yet more method calls that need f as an implicit parameter*/
}
编辑:也许功能请求是个好主意?
EDIT2:这应该适用于可用于理解的所有类型,因此不仅适用于通常的集合类型,如List
or Seq
,而且适用于Future
.