scala高级特性

class Persion{
 var name = "ss"
 var age = 12
 def this(name:String){
 this()
 this.name = name
 }

def this(name:String,age:Int){
 this()
 this.name = name
 this.age = age
 }

}


object Persion{
	println("hello")
 	var name = "spark"
}



匿名函数:
    val fun = (content:String) => print(content)
    fun("hadoop")

高阶函数:函数的参数是函数
    val hiScala = (content:String) => print(content)
    def bigData(fun:(String) => Unit,content:String) {print(content)}//高阶函数
    bigData(hiScala,"scala")

    scala> def spark(fun:(String)=>Unit,name:String){fun(name)}//高阶函数
    spark: (fun: String => Unit, name: String)Unit
    scala> spark((name:String) => print(name),"scala")
    scala
    scala> spark((name) => print(name),"scala")
    scala
    scala> spark( print,"scala")
    scala


    应用
    val array = Array(1,2,3,4,5,6,7)
    val res = array.map(item => item * 2)
    val filter = array.filter(item => item % 2 == 0)
    val filter = array.filter(_ % 2 == 0)

函数返回值是函数
    def fun_return(content:String) = (message:String) => print(content + " " + message)
    fun_return("scala")("spark")


闭包:当fun函数执行完后,在外部依旧能够调用fun的变量=》函数执行完后,其内部的变量依旧能够被外部调用,Scala内部为其建立一个函数对象,
content做为内部成员,其实是对函数对象的成员进行访问
    def fun(content:String) = (message:String) => print(content + " " + message)
    fun("scala")("spark")


柯里化
    def curry(x:Int)=(y:Int) => x + y
    curry(1)(2)
    简化
    def curry(x:Int)(y:Int) = x + y
    curry(1)(2)




val arr = Array("this is one :","this is two : ","this is three","this is four")