這是我的功能:
def sumOfSquaresOfOdd(in: Seq[Int]): Int = {
in.filter(_%2==1).map(_*_).reduce(_ _)
}
為什么我收到錯誤“缺少擴展函式的引數型別”?
uj5u.com熱心網友回復:
map接受帶有一個引數的函式 ( (A) => B),而每個 _占位符代表匿名函式的一個單獨引數(即_ * _具有兩個引數的函式)。您可以將i => i * ilambda 用于您的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
}
uj5u.com熱心網友回復:
我猜是因為map想要一個單一引數的函式,而你要求它*用兩個引數呼叫。替換_ * _為arg => arg * arg并重試。
uj5u.com熱心網友回復:
當“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
(編輯以反映此問題其他答案的變化。)
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/440228.html
標籤:斯卡拉
