In Python, we have the star (or "*" or "unpack") operator, that allows us to unpack a list for convenient use in passing positional arguments. For example:
range(3, 6)
args = [3, 6]
# invokes range(3, 6)
range(*args)
In this particular example, it doesn't save much typing, since range
only takes two arguments. But you can imagine that if there were more arguments to range
, or if args
was read from an input source, returned from another function, etc. then this could come in handy.
In Scala, I haven't been able to find an equivalent. Consider the following commands run in a Scala interactive session:
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)
Is there a more concise way to do this besides the method used in val y
?
There is something similar for functiones: tupled
It converts a function that takes n parameters into a function that takes one argument of type n-tuple.
See this question for more information: scala tuple unpacking
Such a method for arrays wouldn't make much sense, because it would only work with functions with multiple arguments of same type.