Интерпретировать синтаксис Scala для varargs [дубликат]
Возможный дубликат:
синтаксис сахара: _*
Я написал функцию, которая получает переданную строку формата (for String.формат(...)) и массив параметров varargs (среди прочего). Метод выглядит следующим образом:
def myMethod(foo: Number, formatStr: String, params: Any*): Unit = {
// .. some stuff with foo
println(formatStr, params.map(_.asInstanceOf[AnyRef]) : _*)
}
Я получил синтаксис для аргумента paramsздесь . Это работает! Но как это сделать? Я не понимаю синтаксиса второго аргумента к println, особенно концевой части (: _*). Это, очевидно, вызов map и расширение массива до последовательности AnyRefs.
2 ответов:
Как правило, нотация
:используется для описания типа, заставляя компилятор видеть значение как некоторый конкретный тип. Это не совсем таким же, как отливка.В этом случае вы приписываете специальный типvarargsval b = 1 : Byte val f = 1 : Float val d = 1 : Double_*. Это отражает нотацию asterisk, используемую для объявления параметра varargs, и может использоваться для переменной любого типа, которая подразделяется на подклассыSeq[T]:def myMethod(params: Any*) = ... //varargs parameter, use as an Array[Any] val list = Seq("a", 42, 3.14) //a Seq[Any] myMethod(list : _*)
Comments