Scala why_3;(下划线)适用于第一个参数,但不适用于第二个参数

Scala why_3;(下划线)适用于第一个参数,但不适用于第二个参数,scala,Scala,我正在学习scala,我不能理解下面的事情 为什么下面的工作 val colNames=List(“工资新”、“年龄新”、“位置新”) val colRenameMap=colNames.map(->“a”).toMap 但接下来就不行了?是不是我只能用\uu作为第一个参数?这是如何工作的 val colRenameMap=colNames.map(->.split(“”).toMap 路易斯已经回答了这个问题,所以让我们把它转换成正确的答案 val colRenameMap=colNames

我正在学习scala,我不能理解下面的事情

为什么下面的工作

val colNames=List(“工资新”、“年龄新”、“位置新”)
val colRenameMap=colNames.map(->“a”).toMap
但接下来就不行了?是不是我只能用
\uu
作为第一个参数?这是如何工作的

val colRenameMap=colNames.map(->.split(“”).toMap

路易斯已经回答了这个问题,所以让我们把它转换成正确的答案

val colRenameMap=colNames.map(->.split(“”).toMap
转化为

val colRenameMap=colNames.map((a,b)=>a->b.split(“”).toMap
每次使用
\u
时,它都引用不同的参数。使用它两次,您将得到一个包含两个参数的函数,而不是单参数函数
map
needs。在这种情况下,您必须显式地命名您的唯一参数,以便能够使用它两次

val colRenameMap=colNames.map(a=>a->a.split(“”).toMap

这是因为在scala中,下划线在不同的情况下表示不同的含义

第一种情况:

val colNames = List("salary_new", "age_new", "loc_new")
val colRenameMap = colNames.map(_ -> "a").toMap
在这里,您可以按如下方式重写行:

val colRenameMap = colNames.map(x => x -> "a").toMap
若要在lambda表达式中使用参数一次,则可以通过下划线
\uuu
精简表达式

但是,当您尝试使用下划线
\uuu
两次时,它不能用于此目的

在这里,您尝试在lamda表达式中使用参数两次:

                                   //first //second
val colRenameMap = colNames.map(x => x  ->  x.split("")).toMap

您不能使用下划线来简化它,因为每个下划线都引用一个新参数,所以您的第二个示例是创建一个包含两个参数的函数,但您需要一个包含一个参数的函数。尝试使用普通lambda:
x=>x->x.split(“”)