Интерпретировать синтаксис 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.

540   2  

2 ответов:

Как правило, нотация : используется для описания типа, заставляя компилятор видеть значение как некоторый конкретный тип. Это не совсем таким же, как отливка.

val b = 1 : Byte
val f = 1 : Float
val d = 1 : Double
В этом случае вы приписываете специальный типvarargs _*. Это отражает нотацию 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 : _*)

Конечная часть : _* преобразует коллекцию в параметры vararg.

Это выглядит странно, я знаю.

Comments

    Ничего не найдено.