Scala 無名関数と関数合成

個人開発したアプリの宣伝
目的地が設定できる手帳のような使い心地のTODOアプリを公開しています。
Todo with Location

Todo with Location

  • Yoshiko Ichikawa
  • Productivity
  • Free

スポンサードリンク

無名関数、関数リテラルの定義

Scalaの無名関数、関数リテラルは以下のように記述することで定義できる。

val f = (x:Int, y:Int) => x == y

これは引数2つの関数リテラルとなるので、Function2(2は引数2つの意味)のtrait実装の無名クラスの糖衣構文となる。

つまり、こういこと。

val f = new Function2[Int, Int, Boolean] {
  def apply(a: Int, b: Int) = a == b
}


関数合成

引数1つ、つまりFunction1traitは合成関数composeandThenメソッドを持つ。

composeは後ろの関数を実行した後に前の関数を適用する。

val f = (x:Int) => x + 1
val y = (y:Int) => y * 10
val c = f compose y  
c(2)  // f( y( 2 ) )
res27: Int = 21


andThenはその逆。前の関数を実行した後に後ろの関数を適用する。

val d = f andThen y
d(2)  // y( f( 2 ) )
res29: Int = 30