/**
* 函數式編程進階:
* 一、函數和變量同樣做爲Scala語言的一等公民,函數能夠直接賦值給變量
* 二、函數更經常使用的方式是匿名函數,定義的時候只須要說明輸入參數的類型和函數體便可,不須要名稱,
* 通常會把它賦值給變量,在Spark源碼中大量存在
* 三、函數能夠做爲參數直接傳遞給函數,極大的簡化了編程代碼,在Java中須要經過callback來實現
* 這樣的功能
* 四、當函數的返回類型是函數的時候,這就代表Scala函數實現了閉包,Scala函數實際上是類和對象,
* 因此,Scala的參數都做爲了對象的成員!!!
* 五、Scala柯里化能很好的實現鏈式功能
*/編程
一:Scala函數編程進階 一、函數賦值給變量 //把函數賦值給變量 val f = bigData _ f("Spark") //變量f其實也變成了函數 def bigData(name: String): Unit = { println("Hi, " + name) } 二、匿名函數定義 //匿名函數 val fun = (name: String) => println("Hi, " + name) fun("Kafka") 三、將函數傳遞給方法 //將函數傳遞給方法 def getName(func: String => Unit, name: String) = func(name) getName(fun, "Scala") //map中其實也是個函數,map(item=>item*2) Array(1 to 10: _*).map(_ * 2).foreach(println) 四、Currying定義 def funcResult(message: String) = (name: String) => println(message + ": " + name) //funcResult("Java") //這樣返回的是函數 funcResult("Hello")("Java") //Currying函數寫法 //等同於 val result = funcResult("Hello") result("Java")