簡體   English   中英

類型不匹配錯誤:Scala

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM