从scala中的zipWithIndex获取元组作为参数

时间:2018-10-19 09:07:02

标签: scala

我可以在

中传递和使用元组中的值
for ((v,i) <- in.zipWithIndex) {
        println(s"$i is $v")
      }

但是在foreach中,它只能像

一样使用
in.zipWithIndex.foreach {
    case(v, i) => println(s"$i is $v")
}

如何使类似的功能

val f: (Int,Int) => Unit = (v,i) => {println(s"$i is $v")}

,然后将其传递到.foreach() AND (这对我来说很重要),而无需使用模式匹配case

P.S。 .tupled仅适用于方法(def)。不适用于定义为val

的函数

1 个答案:

答案 0 :(得分:1)

函数的参数必须为元组。

scala> val l = List(1,2,3).zipWithIndex                      
l: List[(Int, Int)] = List((1,0), (2,1), (3,2))              

scala> val f = (t: (Int, Int)) => println(s"${t._1} ${t._2}")
f: ((Int, Int)) => Unit = <function1>                        

scala> l.foreach(f)                                          
1 0                                                          
2 1                                                          
3 2   

我个人讨厌._1._n语法,并且更喜欢对元组进行模式匹配。

顺便说一句,您的理解范例也使用模式匹配...