首页 > 解决方案 > {} 块如何表示 scala 中的函数?

问题描述

这是怎么回事:

List(1,2,3).zipWithIndex.map((tup) => tup match {case (v, i) => if (i == 1) 777 else v})

可以简化为:

List(1,2,3).zipWithIndex.map({case (v, i) => if (i == 1) 777 else v})

换句话说,{}块如何替代函数?{}当从未指定它应该这样做时,如何指示 scala 对块的输入执行匹配?究竟什么是{}块?

标签: scala

解决方案


块(只是{})不是一个函数,它是一个表达式(这个是 Unit 类型)。

下面的代码是一个表达式,一旦被计算,它就会返回一个 Function1 或 PartialFunction(你可以看到它有一个参数)。

{ case (v, i) => if (i == 1) 777 else v }

您可以将其分配给变量(函数是对象)

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 }

由于类型推断,无需为函数参数设置类型。在我的示例中,我的 val 类型为我提供了类型。在您的示例中,您map需要(Int, Int) => Int,然后编译器推断出该类型。

你也可以写

List(1, 2, 3).zipWithIndex.map { case (v, i) => if (i == 1) 777 else v }

{}如果要对函数参数(大小写)使用模式匹配,则必须使用。

没有case就没有必要使用{}

List(1, 2, 3).zipWithIndex.map( p => if(p._2 == 1) 777 else p._1 )

推荐阅读