次のように、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
orSeq
のような通常のコレクション型だけでなく、Future
.