gpt4 book ai didi

scala - 序列理解的类型是什么

转载 作者:行者123 更新时间:2023-12-02 00:19:39 26 4
gpt4 key购买 nike

我刚刚开始学习 Scala。

当我在玩 http://www.scala-lang.org/node/111 中的示例时,我发现类型有问题。

object Main extends App {
def even(from: Int, to: Int): Vector[Int] =
for (i <- from until to if i % 2 == 0) yield i

Console.println(even(0, 20).getClass())
}

这不会编译并出现以下错误。

<console>:9: error: type mismatch;
found : scala.collection.immutable.IndexedSeq[Int]
required: Vector[Int]
for (i <- from until to if i % 2 == 0) yield i
^

但是,如果没有返回值的类型说明,它可以工作并且类是 Vector。

object Main extends App {
def even(from: Int, to: Int) =
for (i <- from until to if i % 2 == 0) yield i

Console.println(even(0, 20).getClass()) // => class scala.collection.immutable.Vector
}

这似乎是矛盾的。让我知道编译类型错误的原因是什么。

最佳答案

Luigi 的回答是正确的,但可能需要更多解释。运行时类型确实是 Vector[Int],但编译器不知道这一点。 for 表达式等同于

from.until(to).filter(_%2==0)

因此它创建了一个 Range,然后在其上调用 filter 方法。正如您在 API 文档中所见,Range 的过滤方法被声明为返回一个 IndexedSeq

关于scala - 序列理解的类型是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11489362/

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