我有一些代码,像这样嵌套调用flatMap:
foo.flatMap(implicit f => bar(123).flatMap(b =>
/* and so on... implicit f is still in scope here.*/
))
通常,将其作为一种理解来编写,这使代码更具可读性:
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*/
}
编辑:也许功能要求是个好主意?
编辑2:这应该与所有可用于理解的类型一起使用,因此不仅适用于像
List
或Seq
这样的常用集合类型,而且还适用于Future
。 最佳答案
不,没有。虽然有一张票:https://issues.scala-lang.org/browse/SI-2823