函式字面量:就是乙個函式作為表示式使用,有匿名函式的意思
def m = (x: int) => x + 1
println(m(1))
閉包:簡單說就是函式字面量+自由變數;在執行時,捕獲自由變數,從這個函式字面量建立出函式物件(函式值),叫做閉包
// 例子1
// 這個函式是建立並返回閉包的函式:每呼叫一次,就會產生乙個閉包
// 這裡的more是區域性變數,作用域是makeint函式內部
def makeint(more: int) = (x: int) => x + more
// 產生閉包:捕獲了more變數本身
val inc1 = makeint(1)
println(inc1(10))
// 例子2:閉包能看到閉包外對自由變數的修改
// 這裡的more,是全域性變數
var more = 1
// makeint是閉包
def makeint = (x:int) => x + more
println(makeint(2)) // 3
more = 4
println(makeint(2)) // 6
// 例子3:閉包的結果會被閉包外部看到
var more = 1;
val testlist = list(2,3,4)
// foreach函式裡面引用了自由變數more,也形成了閉包
testlist.foreach(more += _)
println(more)
相應的函式值結果,就叫做閉包,因為函式值是通過閉合這個動作產生的,比如inc1和inc99就是閉包
閉包這個詞,源於:「捕獲」自由變數從而閉合函式字面量的動作
閉包:捕獲的是自由變數本身,而不是自由變數引用的值
函式呼叫引數三種形式
重複引數,用*
def echo(args:string*)=
帶名字的引數,順序可以任意
def echo(arg:string, time:string)=
echo(time="10", arg="arg")
// 結果
// arg
預設值,預設值:zero如果沒傳入,自動賦值為0
def echo(arg:string, time:string, zero:int = 0)=
Scala函式字面量
scala中函式為頭等公民,你不僅可以定義乙個函式然後呼叫它,而且你可以寫乙個未命名的函式字面量,然後可以把它當成乙個值傳遞到其它函式或是賦值給其它變數。下面的例子為乙個簡單的函式字面量 參考整數字面量,3 為一整數字面量 x int x 1這是個函式字面量,它的功能為 1.符好 表示這個函式將符號...
Scala函式字面量簡化寫法
scala提供了多種方法來簡化函式字面量中多餘的部分,比如前面例子中filter方法中使用的函式字面量,完整的寫法如下 x int x 1首先可以省略到引數的型別,scala可以根據上下文推算出引數的型別,函式定義可以簡化為 x x 1這個函式可以進一步去掉引數的括號,這裡的括號不起什麼作用 x x...
閉包函式 scala
閉包函式 返回結果 依賴外部引數 正常函式 val mult x int 閉包函式 var factor 5 依賴引數 閉包函式mult1 val mult1 x int x factor println 閉包函式 mult1 在factor factor 時,結果為 mult1 10 factor...