繁体   English   中英

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

[英]missing parameter type for expanded function (Scala)

这是我的 function:

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

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

map接受带有一个参数的 function ( (A) => B ),而每个_占位符代表匿名 function的一个单独参数(即_ * _是带有两个参数的 function)。 您可以使用i => i * i lambda 作为您的map function:

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想要一个 function 的单个参数,并且您要求它用两个 arguments 调用* 。将_ * _替换为arg => arg * arg并重试。

当期望一个参数的 function 时,“地图”被调用时带有两个参数的 function。 由于使用“reduce”,还有另一个小错误——如果输入序列中没有任何奇数整数,它会抛出异常。

更好的解决方案是:

  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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM