В Python у нас есть оператор star (или "*" или "unpack" ), который позволяет нам распаковать список для удобного использования при передаче позиционных аргументов. Например:
range(3, 6)
args = [3, 6]
# invokes range(3, 6)
range(*args)
В этом конкретном примере он не сохраняет много типизации, так как range
принимает только два аргумента. Но вы можете себе представить, что если было больше аргументов для range
или если args
было прочитано из источника ввода, возвращено из другой функции и т.д., Тогда это может пригодиться.
В Scala я не смог найти эквивалент. Рассмотрим следующие команды, выполняемые в интерактивном сеансе Scala:
case class ThreeValues(one: String, two: String, three: String)
//works fine
val x = ThreeValues("1","2","3")
val argList = List("one","two","three")
//also works
val y = ThreeValues(argList(0), argList(1), argList(2))
//doesn't work, obviously
val z = ThreeValues(*argList)
Есть ли более краткий способ сделать это, кроме метода, используемого в val y
?