在Python中,我們有星號(或「*」或「unpack」)運算符,它允許我們解壓列表以方便使用傳遞位置參數。例如:是否有Python列表解壓(a.k.a.「*」)運算符的Scala等價物?
range(3, 6)
args = [3, 6]
# invokes range(3, 6)
range(*args)
在這個特殊的例子,它並沒有節省多少打字,因爲只有range
兩個參數。但你可以想象,如果有更多的參數range
,或者如果args
從輸入源讀取,從另一個函數返回等,那麼這可能派上用場。
在斯卡拉,我一直無法找到相同的。考慮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
使用的方法是什麼?
錯誤地標記爲重複,而不是。 Scala具有':_ *'運算功能,但它只能在定義端使用可變參數:例如'case class Things(xs:String *)' – 2013-02-22 23:01:58