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 : _* ))