2012-06-22 15 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)} 

Perché non è possibile passare l'argomento s al metodo apply di ListBuffer [String] che èCome passare argomento con stella al metodo successivo?

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

(Metodo apply dalla GenericCompanion.scala)

Il codice ListBuffer[String]("foo", "bar") funziona. Ma sembra che non posso passare attraverso l'elenco di argomenti di stringhe da s che è anche String*.

risposta

9

Dovete dire Scala a disfare s:

ListBuffer[String](s: _*) 

Inoltre, non è necessario il tipi espliciti:

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

avevo caso simile e la soluzione di spacchettamento risolto il problema, tuttavia la conversione implicita non "kick in" (quindi ottengo errore di disallineamento di tipo). È possibile forzare la conversione implicita con la funzione di decompressione? –

Problemi correlati