Usando varargs de Scala
-
06-07-2019 - |
Pregunta
Me estoy arrancando el pelo 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 que tengo que declarar el método con un o
y un os
Seq
por 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 error de tipo:
encontrado: Matriz [Cualquiera]
Seq requerida [java.lang.Object]
He intentado transmitir, que se compila pero falla por la misma razón que el primer ejemplo. Cuando lo intento
println(String.format(msg, (o :: List(os:_*)) :_* ))
esto no se compila con la ambigüedad de conversión implícita ( any2ArrowAssoc
y any2stringadd
)
Solución
def foo(msf: String, o: AnyRef, os: AnyRef*) =
println( String.format(msf, (o :: os.toList).toArray : _* ))
Otros consejos
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 : _* ) )
Prefiero este último, aunque no tiene soporte para la configuración regional *.
- Scala 2.8 tiene soporte local con el formato de RichString.
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow