如何将ArrayBuffer分配给scala中的变量

时间:2016-04-13 00:28:26

标签: arrays scala arraybuffer

我正在使用数组缓冲区创建可变长度数组。

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]

1 个答案:

答案 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重写代码。