【问题标题】:Scala: Expand List of Tuples into variable-length argument list of TuplesScala:将元组列表扩展为元组的可变长度参数列表
【发布时间】:2012-06-01 00:07:28
【问题描述】:

我对如何将 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展开成参数列表?

提前谢谢你!

【问题讨论】:

    标签: scala functional-programming


    【解决方案1】:

    您需要添加:_*

    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!
    

    【讨论】:

    • 谢谢王子!这有效:) 一个简短的 q:_ 这里是引用 List 元素类型,即元组?
    • 我不会说_ 引用了任何东西。相反,_* 是将t 标记为序列参数的类型注释。
    • @elbowich:+1。是的。我错误地解释了 OP 的测验?删除了我的评论。
    猜你喜欢
    • 2015-02-13
    • 2013-11-06
    • 2016-09-06
    • 2012-02-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-18
    • 1970-01-01
    相关资源
    最近更新 更多