怎么会这样:
List(1,2,3).zipWithIndex.map((tup) => tup match {case (v, i) => if (i == 1) 777 else v})
Run Code Online (Sandbox Code Playgroud)
可以简化为:
List(1,2,3).zipWithIndex.map({case (v, i) => if (i == 1) 777 else v})
Run Code Online (Sandbox Code Playgroud)
换句话说,如何用{}块代替函数?{}当从未指定它应该这样做时,scala如何指示对块的输入执行匹配?到底究竟是什么{}块?
块(just {})不是函数,它是一个表达式(这个类型为Unit).
下面的代码是一个表达式,一旦求值,就会返回一个Function1或PartialFunction(你可以看到它有一个参数).
{ case (v, i) => if (i == 1) 777 else v }
Run Code Online (Sandbox Code Playgroud)
您可以将其分配给变量(函数是对象)
val f1:Function1[Tuple2[Int, Int], Int] = { case (v, i) => if (i == 1) 777 else v }
val f2:PartialFunction[Tuple2[Int, Int], Int] = { case (v, i) => if (i == 1) 777 else v }
Run Code Online (Sandbox Code Playgroud)
由于类型推断,不需要将类型设置为函数参数.在我的例子中,我的val类型给了我类型.在您的示例中您的map需求(Int, Int) => Int,然后编译器推断出该类型.
你也可以写
List(1, 2, 3).zipWithIndex.map { case (v, i) => if (i == 1) 777 else v }
Run Code Online (Sandbox Code Playgroud)
{}如果要将模式匹配与函数参数(case)一起使用,则必须使用.
没有它就case没有必要使用{}
List(1, 2, 3).zipWithIndex.map( p => if(p._2 == 1) 777 else p._1 )
Run Code Online (Sandbox Code Playgroud)