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")