首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在使用foldLeft时,Scala采用了错误的类型。

在使用foldLeft时,Scala采用了错误的类型。
EN

Stack Overflow用户
提问于 2013-02-22 00:45:56
回答 1查看 195关注 0票数 0

我正在尝试在Scala中创建一个叉积函数,其中k是我构建叉积的次数。

代码语言:javascript
运行
复制
val l = List(List(1), List(2), List(3))
(1 to k).foldLeft[List[List[Int]]](l) { (acc: List[List[Int]], _) =>
    for (x <- acc; y <- l)
        yield x ::: l
}

但是,此代码无法编译:

代码语言:javascript
运行
复制
test.scala:9: error: type mismatch;
    found   : List[List[Any]]
    required: List[List[Int]]
    for (x <- acc; y <- l)
           ^

为什么它会认为我在那里有一个List[Any]'s ?很明显,我处理的所有东西都是Ints的Lists。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-02-22 01:04:42

您的理解实际上是生成List[List[Int or ListInt]],因此推断的类型是List[ListAny]。下面是来自repl的一个例子:

代码语言:javascript
运行
复制
scala> val l = List(List(1), List(2), List(3))
l: List[List[Int]] = List(List(1), List(2), List(3))
val x = for {
     |     x <- l
     |     y <- l
     |   } yield x ::: l
x: List[List[Any]] = List(List(1, List(1), List(2), List(3)), List(1, List(1), List(2), List(3)), List(1, List(1), List(2), List(3)), List(2, List(1), List(2), List(3)), List(2, List(1), List(2), List(3)), List(2, List(1), List(2), List(3)), List(3, List(1), List(2), List(3)), List(3, List(1), List(2), List(3)), List(3, List(1), List(2), List(3)))
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15007738

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档