Pergunta

Eu estou rasgando meu cabelo fora tentando descobrir como fazer o seguinte:

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

Há uma razão pela qual eu tenho que declarar o método com um o e um os Seq separadamente. Basicamente, acabo com o método chamado formato com um único parâmetro objecto (de tipo List). Tentativa:

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

me dá o erro tipo:

encontrado: Array [Qualquer]

necessário Seq [java.lang.Object]

Eu tentei casting, que compila mas não para praticamente pela mesma razão que o primeiro exemplo. Quando tento

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

esta falha ao compilar com ambiguidade implícita conversão (any2ArrowAssoc e any2stringadd)

Foi útil?

Solução

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

Outras dicas

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

ou

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

Eu prefiro muito mais o último, embora não tenha locale * apoio.

  • Scala 2.8 tem suporte local com o formato de RichString.
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top