Вопрос

Я рву на себе волосы, пытаясь понять, как сделать следующее:

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

Есть причина, по которой мне нужно объявить метод с помощью o и os Seq в отдельности.По сути, я получаю метод формата, вызываемый с одним параметром объекта (типа List).Попытка:

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

Выдает мне ошибку типа:

найденный:Массив[Любой]

требуется Seq[java.lang.Object]

Я попробовал кастинг, который компилируется, но терпит неудачу почти по той же причине, что и первый пример.Когда я пытаюсь

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

это не может скомпилироваться с неявной неоднозначностью преобразования (any2ArrowAssoc и any2stringadd)

Это было полезно?

Решение

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 : _* ) )

Я предпочитаю последний вариант, хотя он не поддерживает локали*.

  • Scala 2.8 имеет поддержку локали в формате RichString.
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top