Scala:将元组列表扩展为可变长度的元组参数列表

25
我很困惑如何将List/Seq/Array扩展为可变长度的参数列表。
假设我有一个接受元组的test_func函数:
scala> def test_func(t:Tuple2[String,String]*) = println("works!")
test_func: (t: (String, String)*)Unit

当我传递元组时,它可以正常工作:

scala> test_func(("1","2"),("3","4"))
works!

通过阅读Scala参考文献,我深刻感受到以下内容同样适用:

scala> test_func(List(("1","2"),("3","4")))
<console>:9: error: type mismatch;
 found   : List[(java.lang.String, java.lang.String)]
 required: (String, String)
              test_func(List(("1","2"),("3","4")))
                        ^

还有一次绝望的尝试:

scala> test_func(List(("1","2"),("3","4")).toSeq)
<console>:9: error: type mismatch;
 found   : scala.collection.immutable.Seq[(java.lang.String, java.lang.String)]
 required: (String, String)
              test_func(List(("1","2"),("3","4")).toSeq)

如何将List/Seq/Array扩展为参数列表?
感谢您的提前帮助!
1个回答

52

你需要添加:_*

scala> test_func(List(("1","2"),("3","4")):_*)
works!
scala> test_func(Seq(("1","2"),("3","4")):_*)
works!
scala> test_func(Array(("1","2"),("3","4")):_*)
works!

谢谢Prince!那个有效 :) 一个简短的问题:这里的“_”是引用列表元素类型,即元组吗? - forker
1
我不会说_引用了任何东西。相反,_*是一种类型注释,将t标记为序列参数。 - elbowich
@elbowich:没错,我误解了楼主的问题。我已经删除了我的评论。 - Prince John Wesley

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接