一個函數字面量的函數體通常只能使用輸入參數和函數字面量內定義的本地變量.不過,Scala允許一個函數字面量使用它所在環境的變量.
所謂"閉包",指的是這樣的一個函數字面量,它使用一個從其所在環境"捕獲"到的非本地、非參數變量。有時人們會交替使用術語"函數字面量"和"閉包"。但是從技術上來說,它們並不相同。
下面是一個閉包的例子:
def encodeWithSeed(num:Int, seed:Int):Long = { def encode(x:Int,func:(Int)=>Int):Long = { val y = x + 1000; func(y); } val result = encode(num,(n:Int)=>(n*seed)); result; }