estoy rasgando mi pelo a cabo tratando de encontrar la manera de hacer lo siguiente:Uso varargs de Scala
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 (del 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: de fundición
found: Array[Any]
required Seq[java.lang.Object]
He tratado, que compila pero falla por más o menos la misma razón que el primer ejemplo. Cuando intento
println(String.format(msg, (o :: List(os:_*)) :_*))
esta falla al compilar con la ambigüedad implícita de conversión (any2ArrowAssoc
y any2stringadd
)
Se compila pero se cae en tiempo de ejecución: Excepción en el hilo "principal" java.lang.ClassCastException:. $ $ De colon de colon Scala no puede ser echado a scala.runtime.BoxedObjectArray \t en scala.runtime.RichString .format (RichString.scala: 242) –
Además, ¿de dónde viene theList? –
Solucionado, funciona ahora. Estoy presentando un informe de error: Scala no debería tener ClassCastExceptions, excepto cuando haya utilizado comoInstanceOf. toList es un método en Iterable [A] –