我有一些代码,像这样嵌套调用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:这应该与所有可用于理解的类型一起使用,因此不仅适用于像ListSeq这样的常用集合类型,而且还适用于Future

最佳答案

不,没有。虽然有一张票:https://issues.scala-lang.org/browse/SI-2823

09-26 09:12