2011-05-08 11 views
9

estoy tratando de devolver una secuencia mutable con un bucle hasta, pero tengo una ss inmutable a cambio de (0 hasta nbGenomes):Cómo convertir Sec inmutable a la SEC mutable con hasta bucle

def generateRandomGenome(nbGenomes:Int): IndexedSeq[GenomeDouble]={ 
    return ((0 until nbGenomes toSeq).map{e => generateRandomGenome}) 
    } 

Error de compilación de devolución:

found : scala.collection.immutable.IndexedSeq[org.openmole.tools.mgo.mappedgenome.genomedouble.GenomeDouble] 
required: scala.collection.mutable.IndexedSeq[org.openmole.tools.mgo.mappedgenome.genomedouble.GenomeDouble] 
    return ((0 until nbGenomes toSeq).map{e => generateRandomGenome}) 

¿Cómo puedo forzar el ciclo until para devolver un seq mutable? Gracias comunidad scala!

Respuesta

9

Puede convertir una secuencia inmutable en una mutable creando una nueva secuencia mutable con el constructor varargs.

scala> val l = List(1,2,3) 
l: List[Int] = List(1, 2, 3) 
scala> scala.collection.mutable.ArraySeq(l:_*) 
res0: scala.collection.mutable.ArraySeq[Int] = ArraySeq(1, 2, 3) 
+1

gracias Kim ayuda :) – reyman64

3

Si el compilador sabe qué tipo de colección esperar (y lo hace aquí como lo indica el mensaje de error) se puede utilizar scala.collection.breakOut para permitir que el tipo que se infiere sobre la base del tipo esperado para la expresión en lugar de la tipo de la colección en sí.

def generateRandomGenomes(n: Int): collection.mutable.IndexedSeq[Double] = 
    (0 until n).map(_ => util.Random.nextDouble())(collection.breakOut) 

(I ajustado su ejemplo un poco a pegarse a los tipos conocidos.)

La mayoría (todos?) Tipos de colección tienen algunos métodos prácticos de fábrica en sus objetos de compañía. Así pues, otra manera de lograr lo mismo es utilizar scala.collection.mutable.IndexedSeq.fill:

def generateRandomGenomes(n: Int): collection.mutable.IndexedSeq[Double] = 
    collection.mutable.IndexedSeq.fill(n)(util.Random.nextDouble()) 
+0

Gracias por esta explicación y otra ejemplo :) – reyman64

Cuestiones relacionadas