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 )

¿Fue útil?

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
scroll top