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
?