尝试在scala 2.11.0中编译下面的函数
def dafuq(canvas: Array[Array[Boolean]]): Array[Array[Boolean]] = {
for (r <- canvas.reverse) yield r.zipWithIndex.map((c: Boolean, i: Int) => c)
}
产量
Solution.scala:6: error: type mismatch;
found : (Boolean, Int) => Boolean
required: ((Boolean, Int)) => ?
for (r <- canvas.reverse) yield r.zipWithIndex.map((c: Boolean, i: Int) => c)
^
该功能是假的,但它说明了我遇到的问题。我对Scala很新,所以这可能是一个新手的错误,但我找不到任何解决方案或解释这个问题。你知道导致上述行为的原因吗?
还有lambda表达式的返回类型提示吗?
答案 0 :(得分:3)
我也多次遇到这个编译错误,但它不是类型推断问题。您提供了带有2个参数的匿名函数,但编译器期望具有单个元组参数的函数。 2解决方案:
def dafuq(canvas: Array[Array[Boolean]]): Array[Array[Boolean]] = {
for (r <- canvas.reverse) yield r.zipWithIndex.map(ci => ci._1)
}
或
def dafuq(canvas: Array[Array[Boolean]]): Array[Array[Boolean]] = {
for (r <- canvas.reverse) yield r.zipWithIndex.map { case (c, i) => c }
}
在第一个解决方案中,ci
被推断为一对(Boolean, Int)
。在第二个解决方案中,我们使用模式匹配表达式。
还有lambda表达式的返回类型提示吗?
我不知道,但您可以在任何表达式上添加类型注释。例如:case (c, i) => c: Boolean
。