我有以下代码,我想知道为什么变量 number
被计算两次:
import cats.effect.IO
import scala.util.Random
object Main {
private val number: IO[Int] =
IO(Random.between(3, 300))
def main(args: Array[String]): Unit = {
number
.flatMap { e =>
println(e);
number
}.flatMap { e =>
println(e);
IO.unit
}.unsafeRunSync()
}
}
程序打印了两个不同的数字,尽管这个数字是一个赋值。我知道在这里,我描述的是计算而不是执行,在宇宙的尽头,我运行程序。
问题是,为什么它会打印出两个不同的数字?
最佳答案
有区别
private val number: IO[Int] = IO(Random.nextInt())
和
private val number2: Int = Random.nextInt()
number
是一个计算随机数的值。当多次评估时,IO
类型的值(也称为此计算)会运行多次,从而产生多个不同的随机数。
而 number2
在评估时只是一个数字。
这与lambda(val lambda = () => Random.nextInt()
)和值(val value = Random.nextInt()
)。
关于scala - 描述一个计算,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58047118/