map(identity)
Scala内包表記を避けるにはどうすればよいfor
ですか?
たとえば、次のことを考慮してください。
import scala.concurrent._
import scala.concurrent.duration._
object Test extends App {
implicit val executorContext = ExecutionContext.global
val future = Future.successful { 1 }
val result = for (
value <- future;
b <- Future { value * 2 }
) yield b
println(Await.result(result, 60 seconds))
}
IIUC、理解は次のfor
ようなものに変換されます
future.flatMap(value => Future { value * 2 }).map(identity)
map(identity)
何らかの方法で末尾を回避できますか? それとも、Scala はそれを最適化できますか? map
(副作用があるかどうかは不明なので、できないと思いますよね?)
PS この特定の例では、物事を改善できることを知っています。たとえば、未来を返す関数Future { value * 2}
の呼び出しである一般的なケースについて疑問に思っています。f(value)
f