[英]Type mismatch error when folding a List[Int] with scala.math.pow: found Double, required Int
使用 math.pow() 時出現類型不匹配錯誤
@ List(1,2,3).foldLeft(1)( (x,y) => scala.math.pow(x,y) )
cmd28.sc:1: type mismatch;
found : Double
required: Int
val res28 = List(1,2,3).foldLeft(1)( (x,y) => scala.math.pow(x,y) )
^
Compilation Failed
如果我只是使用 List 的第一個 to 元素運行它,它會按預期工作。
@ scala.math.pow(1,2)
res28: Double = 1.0
此外,repl (amm) 中的 function 定義表明它期待雙倍。
@ scala.math.pow <tab>
def pow(x: Double, y: Double): Double
那么,為什么我會found Double, required Int
? 我試過通過雙打和整數
math.scala.pow(x.toDouble, y.toDouble)
但我收到相同的錯誤消息。
如果您檢查foldLeft
的類型簽名,您會看到它看起來像這樣:
def foldLeft[B](z: B)(op: (B, A) => B): B
所以,讓我們看看你在哪里稱呼它:
List(1,2,3).foldLeft(1)( (x,y) => scala.math.pow(x,y) )
所以初始值是Int類型的1
,所以 function 應該是(Int, Int) => Int類型,所以 function 應該返回一個Int ,但它返回一個Double 。
您可以像這樣修復它:
(返回一個Int )
List(1,2,3).foldLeft(1) {
case (acc, x) => math.pow(acc, x).toInt
}
或者像這樣:
(返回一個Double )
List(1,2,3).foldLeft(1.0d) {
case (acc, x) => math.pow(acc, x)
}
順便說一句,兩個選項都將返回1
,因為1^x
總是返回1
; 這可能不是您想要的,這可能意味着您不了解foldLeft
工作原理。 我建議您在互聯網上查找有關如何從左到右應用該操作的詳細說明。
此外,這與Ammonite無關。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.