scala variadic-functions

Usando varargs de Scala



variadic-functions (2)

Me estoy arrancando los pelos tratando de descubrir cómo hacer lo siguiente:

def foo(msf: String, o: Any, os: Any*) = { println( String.format(msf, o :: List(os:_*)) ) }

Hay una razón por la cual tengo que declarar el método con un o y un os Seq separado. Básicamente, termino con el método de formato llamado con un solo parámetro de objeto (de tipo List ). Intentando:

def foo(msf: String, o: Any, os: Any*) = { println( String.format(msf, (o :: List(os:_*))).toArray ) }

Me da el tipo de error:

encontrado: Matriz [Cualquiera]

requerido Seq [java.lang.Object]

Intenté el casting, que compila pero falla por la misma razón que en el primer ejemplo. Cuando intento

println(String.format(msg, (o :: List(os:_*)) :_* ))

esto no se puede compilar con la ambigüedad de conversión implícita ( any2ArrowAssoc y any2stringadd )


def foo(msf: String, o: AnyRef, os: AnyRef*) = println( String.format(msf, o :: os.toList : _* ) )

o

def foo(msf: String, o: AnyRef, os: AnyRef*) = println( msf format (o :: os.toList : _* ) )

Yo prefiero este último, aunque no tiene soporte de locale *.

  • Scala 2.8 tiene soporte de configuración regional con el formato de RichString.

def foo(msf: String, o: AnyRef, os: AnyRef*) = println( String.format(msf, (o :: os.toList).toArray : _* ))