У меня есть код с вложенными вызовами 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*/
}
РЕДАКТИРОВАТЬ: Может быть, запрос функции будет хорошей идеей?
EDIT2:. Это должно работать со всеми типами, которые могут использоваться для понимания, поэтому не только с обычными типами коллекций, такими как List
или Seq
, но также с Future
.