Scalaのクロージャ
クロージャは、関数内の外部宣言または複数の変数に依存する値を返す関数です。
一般的には関数内だけで別の関数であると考えられてクロージャはローカル変数にアクセスすることができます。
次のようにこの無名関数:
val multiplier = (i:Int) => i * 10
関数本体は関数のパラメータとして、変数iを持っています。 次のようなコードの別の部分:
val multiplier = (i:Int) => i * factor
乗算器内の2つの変数があります:iと要因。 私は、関数の仮パラメータである場合、乗算器、私は新たな価値を与えられたときに、関数が呼び出されます。 ただし、要因は、正式なパラメータではありませんが、自由変数は、以下のコードを考えてみます。
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