缺少扩展函数的参数类型 (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
(已编辑以反映此问题其他答案的变化。)
这是我的函数:
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
(已编辑以反映此问题其他答案的变化。)