[英]Type mismatch error : Scala
我正在嘗試編寫一個scala程序以查找素數,並已編寫了以下代碼:
object primenumber {
import scala.collection.mutable
import scala.collection.mutable.ArrayBuffer
def primenumber_func(raw_arr: Array[Int]){
var raw_arbuf = raw_arr.toBuffer
var del_arr = new ArrayBuffer[Int]()
for(ctx <- 2 to (raw_arbuf.max-1)){
del_arr = raw_arbuf.filter(_%ctx == 0)
raw_arbuf = raw_arbuf diff del_arr
}
println(raw_arbuf)
}
}
並遇到以下錯誤:
<console>:18: error: type mismatch;
found : scala.collection.mutable.Buffer[Int]
required: scala.collection.mutable.ArrayBuffer[Int]
對於我在做什么錯的任何建議,我們將不勝感激。
寫
var del_arr: mutable.Buffer[Int] = new ArrayBuffer[Int]()
而不只是
var del_arr = new ArrayBuffer[Int]()
否則,Scala編譯器將del_arr
類型推斷為實現類型ArrayBuffer[Int]
而不是特征類型Buffer[Int]
,並且filter
返回Buffer[Int]
,因此您無法重新分配del_arr
。
順便說一下, primenumber_func((1 to 100).toArray)
產生ArrayBuffer(1)
。 那是可取的行為嗎?
我會說最好避免使用可變狀態,並嘗試使用高階函數解決此問題。 例如,這是一個內襯,可以為您完成!
def isPrime(num: Int): Boolean = (2 to num) forall (x => num % x != 0)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.