作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用 ZIO:https://github.com/zio/zio
在我的 build.sbt
:
"dev.zio" %% "zio" % "1.0.0-RC9"
val t = Task {
println(s"Compute")
12
}
val r = unsafeRun(for {
tt1 <- t
tt2 <- t
} yield {
tt1 + tt2
})
println(r)
Compute
Compute
24
Promise
:
val p = for {
p <- Promise.make[Nothing, Int]
_ <- p.succeed {
println(s"Compute - P")
48
}
r <- p.await
} yield {
r
}
val r = unsafeRun(for {
tt1 <- p
tt2 <- p
} yield {
tt1 + tt2
})
Compute - P
Compute - P
96
val p = for {
p <- Promise.make[Nothing, Int]
_ <- p.succeed(48)
r <- p.await
} yield {
println(s"Compute - P")
r
}
最佳答案
计算结果有副作用吗?如果没有,你可以只使用一个普通的旧惰性 val,也许被提升到 ZIO
.
lazy val results = computeResults()
val resultsIO = ZIO.succeedLazy(results)
ZIO
的重点。 .
flatMap
在您的计算机上
Task
并编写程序的其余部分,该程序需要在对
flatMap
的调用中获得该计算的结果。 ,线程
result
必要时通过函数调用将值作为参数。
val compute = Task {
println(s"Compute")
12
}
compute.flatMap { result =>
// the rest of your program
}
关于scala - ZIO : How to compute only once?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56944089/
我是一名优秀的程序员,十分优秀!