我对 Scala 可变参数有一个初步的了解:接受可变参数的方法的参数需要hint它是一个 varargs 使用_*
。使用Scala 2.10.3,我定义了以下两个方法
scala> def method(varargs:Int*)(more:String*) = println(varargs,more)
method: (varargs: Int*)(more: String*)Unit
scala> val method2 = method(1,2,3)_
method2: Seq[String] => Unit =
使用列表或范围直接调用它们效果很好
scala> val paramList = List("hi","ho")
paramList: List[java.lang.String] = List(hi, ho)
scala> method2(paramList)
(WrappedArray(1, 2, 3),List(hi, ho))
scala> val range = (1 to 5) map {_.toString}
range: scala.collection.immutable.IndexedSeq[String] = Vector(1, 2, 3, 4, 5)
scala> method2(range)
(WrappedArray(1, 2, 3),Vector(1, 2, 3, 4, 5))
为什么当我通过赋予参数来调用它们时_*
,我收到错误?
scala> method2(paramList:_*)
<console>:11: error: type mismatch;
found : List[String]
required: Seq[Seq[String]]
method2(paramList:_*)
^
scala> method2(range:_*)
<console>:11: error: type mismatch;
found : scala.collection.immutable.IndexedSeq[String]
required: Seq[Seq[String]]
method2(range:_*)
^