2012-06-22 17 views
5
scala> class A (s: String*) { val l: ListBuffer[String] = ListBuffer[String](s) } 
<console>:8: error: type mismatch; 
    found : String* 
    required: String 
    class A(s: String*) {val l: ListBuffer[String] = ListBuffer[String](s)} 

Por qué no es posible pasar el argumento s con el método de aplicación de ListBuffer [String] que es¿Cómo pasar el argumento con estrella al siguiente método?

def apply[A](elems: A*): CC[A] = { ... } 

(Método apply del GenericCompanion.scala)

El código ListBuffer[String]("foo", "bar") funciona. Pero parece que no puedo pasar la lista de argumentos de cadenas de s que también es String*.

Respuesta

9

tiene que decirle a Scala para descomprimir s:

ListBuffer[String](s: _*) 

También no necesitan los tipos explícitos:

scala> class A (s: String*) { val l = ListBuffer(s: _*) } 
defined class A 
+0

que tenía caso similar y su solución de desempaquetado resuelto el problema, sin embargo la conversión implícita no "inicia" (así que obtengo un error de desajuste de tipo). ¿Es posible forzar la conversión implícita con la función de desempaquetar? –

Cuestiones relacionadas