缺少扩展函数的参数类型 (Scala)

missing parameter type for expanded function (Scala)

这是我的函数:

def sumOfSquaresOfOdd(in: Seq[Int]): Int = {
  in.filter(_%2==1).map(_*_).reduce(_+_)
}

为什么我会收到“缺少扩展函数的参数类型”错误?

我猜是因为 map 想要一个只有一个参数的函数,而你要求它用两个参数调用 *。将 _ * _ 替换为 arg => arg * arg 并重试。

map is accepting function with one parameter ((A) => B) while every _ placeholder represents a separate parameter of anonymous function(即 _ * _ 是带有两个参数的函数)。您可以将 i => i * i lambda 用于 map 函数:

def sumOfSquaresOfOdd(in: Seq[Int]): Int = {
  in.filter(_%2==1)
    .map(i => i * i)
    .reduce(_ + _)
}

您也可以使用 sum 而不是 reduce(_ + _)(注意 sum 不会抛出空序列,而 reduce 会):

def sumOfSquaresOfOdd(in: Seq[Int]): Int = {
  in.filter(_%2==1)
    .map(i => i * i)
    .sum
}

当“map”需要一个参数的函数时,却用一个带有两个参数的函数调用了它。由于使用“reduce”,还有另一个小错误 - 如果输入 Seq 中没有任何奇数 Int,它会抛出异常。

更好的解决方案是:

  def sumOfSquaresOfOdd(in: Seq[Int]): Int =
    in.filter(_ % 2 == 1) . map(x => x * x) . sum

您必须使用 Scala2。 Scala3 给出了更好的错误信息:

Error:
2 |  in.filter(_%2==1).map(_*_).reduce(_+_)
  |                        ^^^
  |                        Wrong number of parameters, expected: 1

(已编辑以反映此问题其他答案的变化。)