Используя аргумент переменной длины в scala

Я знаю, как определить метод с аргументом переменной длины:

  case class taxonomy(vocabularies:(String,Set[String])*)

и код клиента очень чистый:

  val terms=taxonomy("topics"->Set("economic","politic")
                   ,"tag"->Set("Libya","evolution")
                   )

но я хочу знать, как я могу использовать этот класс case, когда у меня есть переменная (вместо последовательности переменных), например:

val notFormattedTerms = Map("topics"->Set("economic","politic")
       ,"tag"->Set("Libya","evolution"))

Ответ 1

taxonomy(notFormattedTerms.toSeq:_*)

С : _* вы фактически преобразуете аргумент последовательности, чтобы он выглядел так, как если бы несколько методов были переданы методу переменной длины. Это преобразование, однако, работает только для (упорядоченных?) Простых типов последовательностей и, как в этом случае, не для a Map. Таким образом, перед использованием будет использоваться явный toSeq.