[英]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.