Scala クロージャ


up.gif Scala 関数

クロージャは、戻り値が関数の外で宣言された 1 つ以上の変数に依存する関数です。

一般に、クロージャは、関数内のローカル変数にアクセスできる別の関数と単純に考えることができます。

たとえば、次の無名関数:

val multiplier = (i:Int) => i * 10

関数本体には変数 i があり、関数のパラメータとして使用されます。以下の別のコード:

val multiplier = (i:Int) => i * factor

乗算器には 2 つの変数があります: i とactor。 i の 1 つは関数の仮パラメータであり、乗算関数が呼び出されるとき、i には新しい値が割り当てられます。ただし、factor は仮パラメータではなく、自由変数です。次のコードを考えてみましょう:

var factor = 3  
val multiplier = (i:Int) => i * factor

ここでは、関数の外部で定義される自由変数係数を導入します。

このように定義された関数変数乗算器は、関数の外で定義された変数を参照するため、「クロージャ」になります。この関数を定義するプロセスは、この自由変数をキャプチャして閉じられた関数を形成することです。

完全な例

object Test {  
   def main(args: Array[String]) {  
      println( "muliplier(1) value = " +  multiplier(1) )  
      println( "muliplier(2) value = " +  multiplier(2) )  
   }  
   var factor = 3  
   val multiplier = (i:Int) => i * factor  
}

上記のコードを実行すると、出力結果は次のようになります:

$ scalac Test.scala  
$  scala Test  
muliplier(1) value = 3  
muliplier(2) value = 6

up.gif Scala関数