我正在使用数组缓冲区创建可变长度数组。
import scala.collection.mutable.ArrayBuffer
val b = ArrayBuffer[Int]() // empty array!
b += (1, 2, 3, 5) // append and output: ArrayBuffer(1, 2, 3, 5)
现在我想将变量b分配给
var a = Array[Int]() // a(0) = 10 // error because a is empty array
a = b.toArray // Array(1, 1, 2)
相反,如果我想将缓冲区分配给新变量c,则会出现错误。
var c = ArrayBuffer[Int]()
c = a.toBuffer // Conversely, convert the array a to an array buffer.
<console>:8: error: missing arguments for method apply in class GenericCompanion; follow this method with `_' if you want to treat it as a partially applied function
var c = ArrayBuffer[Int]
答案 0 :(得分:1)
c
的类型推断为ArrayBuffer
,而a.toBuffer
返回mutable.Buffer
(它是ArrayBuffer
的超类之一)。因此,简单的解决方法是明确将c
的类型设置为mutable.Buffer[Int]
:
import scala.collection.mutable
import scala.collection.mutable.ArrayBuffer
var a = Array[Int]()
var c:mutable.Buffer[Int] = ArrayBuffer[Int]()
c = a.toBuffer
另外,作为附带通知,在Scala中不鼓励使用这样的可变状态。尝试使用不可变集合和val
s重写代码。