2011-12-01 11 views
5

considerar métodos:¿Cómo pasar argumentos variados al agregar otro en Scala?

def clearlnOut(coll : Any*) 
{ 
    clearOut(coll:_*,"\n") // error 
} 
def clearOut(coll : Any*) 
{ 
    ... 

El compilador dice:

error: no `: _*' annotation allowed here (such annotations are only allowed in arguments to *-parameters)

Ahora estoy confundido. Es claro el caso de usar argumentos variados, entonces ¿cómo pasar tal "colección" aumentada apropiadamente?

+0

Esto merece una/r/subreddit lolscala. –

Respuesta

6

Prueba esto:

def clearlnOut(coll : Any*) { 
    clearOut(coll ++ "\n") 
} 

ACTUALIZACIÓN: mucho mejor versión sugerida por @Rex Kerr (véase el comentario a continuación):

def clearlnOut(coll : Any*) { 
    clearOut((coll :+ "\n"): _*) 
} 
+0

Bien, gracias. Pensé que los argumentos variados (cuando pasa) tienen que ser desplegados. – greenoldman

+4

¿Realmente quieres '++'? Eso agregará '\ n' como un personaje (y agregaría" foo "como tres elementos separados de un carácter). Parece que ': +' es el camino a seguir. Además, ¿no quieres agregar ': _ *' a él? De lo contrario, obtienes un 'Seq [Seq [Any]]', un nivel extra de anidación. –

+0

@RexKerr: Gracias por sus sugerencias, tiene toda la razón. Agregué su solución a mi respuesta, sin embargo, probablemente debería agregar una respuesta por separado para darle un crédito completo por esto. –

Cuestiones relacionadas