本文按我本身理解的内容进行叙述,可能不具备广泛性:函数
概念: 柯里化(currying, 以逻辑学家Haskell Brooks Curry的名字命名)指的是将原来接受两个参数的函数变成新的接受一个参数的函数的过程,新的函数返回一个以原有第二个参数做为参数的函数。 在Scala中方法和函数有细微的差异,一般编译器会自动完成方法到函数的转换 。spa
一、简单来讲就是把fun(String x, String y)转为须要两次调用方法执行的操做,第一次传递一个参数而后赋值给一个对象,当第二次传递参数的时候就会执行fun当中的代码。参数应该从左到右依次赋值。.net
普通函数并不支持柯里化的功能,须要使用scala当中的语法糖进行转换scala
语法糖: code
val fun = 函数名 _
参考柯里化过程https://blog.csdn.net/qq_41851454/article/details/80032321对象
代码逻辑示例:blog
def mysum(x:Int)(y:Int): Int = {println(x);x+ y} // 该方法不能使用def mysum(x:Int, y:Int):Int = {x+y} // 执行语法糖操做 val f1 = mysum _ // 第一次调用函数 val f2 = f1(1) println(f2) // 第二次调用函数 val result = f2(3) // 打印结果 println("the result is "+result)
二、 语句的说明排序
val aaa:List[Int] = List(1, 2, 3, 4, 1, 6) val bb = aaa.map((_,1)).groupBy(_._1).mapValues(_.length).toList.sortBy(-_._2) val bb = aaa.map((_,1)) //注释:_表示aaa当中的每个元素 // (_,1)表示组成一个(元素,1)的元组 // 结果:(1, 1) (2, 1) (3, 1) (4, 1) (1, 1) (6, 1) .groupBy(_._1) // 表示将元组里面的每一个元素的第一个参数进行分组 // 结果:与mapvalues一块儿 .mapValues(_.length) // 表示将分组后的元素进行map化 // (1, 2) (2, 1) (3, 1) (4, 1) (6, 1) .toList.sortBy(-_._2) // 将map转换为list元组 // List((1,2), (6,1), (2,1), (3,1), (4,1)) // -_._2表示使用list中每一个元素的第二个参数进行排序