scala中可以通过如下形式声明变长参数列表
scala> def sum(i : Int *) = i.sum
sum: (i: Int*)Int
scala> sum(1,2,3)
res0: Int = 6
此时sum函数接受一个长度不定的Int的集合,并可以调用集合相关方法。参数i可以被当作集合来使用。
我们有时候会通过其他方式生成一个集合,并试图将其传入这种带有变长参数列表的函数中。
此时,就会出现类型不匹配的问题,如下:
scala> sum(Seq(1,2,3))
<console>:9: error: type mismatch;
found : Seq[Int]
required: Int
sum(Seq(1,2,3))
^
为了解决以上问题,我们可以在集合后将其声明为 _ *
的,例如:
scala> sum(Seq(1,2,3):_ *)
res1: Int = 6
此处的通过上述表现可以看出scala中 _*
应该是 trait Traversable 的某个父类型,因此,需要对Seq等集合类进行一定的转换