gpt4 book ai didi

scala - 为什么 Scala 的 LazyList 元素在计算后显示为未评估?

转载 作者:行者123 更新时间:2023-12-03 20:00:24 26 4
gpt4 key购买 nike

我对 Scala 完全陌生。我一直在玩 LazyList s。考虑以下:

val fun: Int => Int = (x: Int) => {
println("PROCESSING...")
x + 1
}

val lazyList = LazyList(fun(1), fun(2), fun(3))
上面的代码片段打印 "PROCESSING..."三次,表示 LazyList 的所有三个元素被计算。我发现这种行为对于懒惰的集合来说是相当意外的。所以,我决定打印它:
println(lazyList) // which prints "LazyList(<not computed>)".
我以为它会打印出来 LazytList(2, 3, 4) . (我不完全确定,但在我看来,Scala 的 println 适用于 用于惰性集合 有点像 :sprint 中的 GHCi 命令,将集合分为两部分:评估的和未评估的。)
所以,这是我的问题,关于这段代码:
  • 为什么没有元素显示为评估?如果他们确实没有被评估,这三重是什么"PROCESSING..."有关的事?如果不是,为什么println这么说?
  • 我们为什么要LazyList的参数如 fun(1)立即计算?我们为什么要抛弃call-by-need初始化时的策略?还有其他情况会发生这样的事情吗?请注意,当我们使用 map 时不会产生任何输出而不是像预期的那样手动写下来。
  • 最佳答案

    试试 #::构造函数

    scala> fun(1) #:: fun(2) #:: LazyList.empty
    val res0: scala.collection.immutable.LazyList[Int] = LazyList(<not computed>)
    #::LazyList.apply 不同,采用按名称参数这需要按值。

    关于scala - 为什么 Scala 的 LazyList 元素在计算后显示为未评估?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67550532/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com