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