类型不匹配错误:Scala

时间:2018-02-04 07:44:35

标签: 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]

非常感谢任何关于我做错事的建议。

2 个答案:

答案 0 :(得分:0)

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)。这是理想的行为吗?

答案 1 :(得分:0)

我想说更好地避免使用可变状态并尝试使用更高阶函数来解决这个问题。例如,这是一个可以为你做这个的衬垫!

def isPrime(num: Int): Boolean = (2 to num) forall (x => num % x != 0)