0

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

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
}

但是,此代码无法编译:

test.scala:9: error: type mismatch;
    found   : List[List[Any]]
    required: List[List[Int]]
    for (x <- acc; y <- l)
           ^

为什么它总是认为我有一个List[Any]'s 那里?显然,我正在处理的一切都是Lists of Ints。

4

1 回答 1

4

您的 for 理解有效地产生 List[List[Int 或 List[Int]]],因此推断的类型是 List[List[Any]]。这是repl的一个例子:

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)))
于 2013-02-21T17:04:42.077 回答