本文按我本身理解的內容進行敘述,可能不具備廣泛性:函數
概念: 柯里化(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中每一個元素的第二個參數進行排序