Использование varargs от Scala
я рву на себе волосы, пытаясь выяснить, как сделать следующее:
def foo(msf: String, o: Any, os: Any*) = {
println( String.format(msf, o :: List(os:_*)) )
}
есть причина, почему я должен объявить метод с o
и os
Seq
отдельно. В основном, я получаю метод format, вызываемый с одним параметром объекта (типа List
). Попытка:
def foo(msf: String, o: Any, os: Any*) = {
println( String.format(msf, (o :: List(os:_*))).toArray )
}
дает мне ошибку типа:
найдено: массив[любой]
требуются Seq[java.ленг.Объект]
Я пробовал кастинг, который компилируется, но терпит неудачу по той же причине, что и первый пример. Когда я пытаюсь
println(String.format(msg, (o :: List(os:_*)) :_* ))
это не удается скомпилировать с неявное преобразование неопределенности (any2ArrowAssoc
и any2stringadd
)
2 ответа:
def foo(msf: String, o: AnyRef, os: AnyRef*) = println( String.format(msf, (o :: os.toList).toArray : _* ))
def foo(msf: String, o: AnyRef, os: AnyRef*) = println( String.format(msf, o :: os.toList : _* ) )
или
def foo(msf: String, o: AnyRef, os: AnyRef*) = println( msf format (o :: os.toList : _* ) )
Я предпочитаю последнее, хотя у него нет поддержки locale*.
- Scala 2.8 имеет поддержку локали с форматом RichString.