【发布时间】:2012-12-13 22:32:07
【问题描述】:
我有一些嵌套调用 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: 这应该适用于所有可用于 for 理解的类型,因此不仅适用于常见的集合类型,如 List 或 Seq,还适用于 Future .
【问题讨论】:
-
我会接受功能请求...
-
我将在 SI-2823 下试一试;在这个问题的时候,我看着它。如果您将隐式 f
-
@som-snytt:我不太清楚您所说的“将未来主义指定为必要条件”是什么意思。也许您可以自己编辑问题或提出编辑建议?
-
我可以编辑它吗?仍然是一个新手。通过未来主义,我对您对另一个答案的旧评论感到很可爱,它必须与期货一起使用。
-
@som-snytt:如果您无法编辑它(由于声誉低下),您可以提出编辑建议,我可以改进它。我会编辑它,如果你觉得有必要,你可以添加。
标签: scala implicit scala-2.10 scala-2.9 for-comprehension