Usando varargs de Scala
-
06-07-2019 - |
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
)
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