Каков тип списка аргументов переменной длины в Scala?
Предположим, что я объявляю функцию следующим образом:
def test(args: String*) = args mkString
Каков тип args?
Ответ 1
Это называется переменным числом аргументов или короткими varargs. Статический тип Seq[T], где T представляет T*. Поскольку Seq[T] - это интерфейс, он не может использоваться как реализация, которая в этом случае scala.collection.mutable.WrappedArray[T]. Чтобы узнать о таких вещах, полезно использовать REPL:
Varargs часто используются в сочетании с символом _*, который является подсказкой для компилятора передать элементы Seq[T] в функцию вместо самой последовательности:
scala> def test[T](seq: T*) = seq
test: [T](seq: T*)Seq[T]
// result contains the sequence
scala> test(Seq(1,2,3))
res3: Seq[Seq[Int]] = WrappedArray(List(1, 2, 3))
// result contains elements of the sequence
scala> test(Seq(1,2,3): _*)
res4: Seq[Int] = List(1, 2, 3)