Scala入門 その5 関数とクロージャ
こんにちは、 @kz_morita です。
今回は、Scala 入門 その5 ということで関数とクロージャについてまとめます。
メソッドと関数 Scala では、メソッドと関数が明確な違いがあります。
関数はそれ自体が値となりますが、メソッドはScalaの言語の機能でそのままでは値として扱えないようです。
それぞれみていきます。
メソッド クラス、トレイト、シングルトンオブジェクトのメンバーになっている関数をメソッドと呼びます。
object Hoge { def hello(): Unit = { println("Hello") } } println などもメソッドですが、Scala の Predef オブジェクトの中に定義されています。
package scala object Predef extends scala.LowPriorityImplicits { // ... def println() : scala.Unit = { /* ... */ } // ... } 関数値と関数リテラル 一方関数は、以下のような関数リテラルで定義することができます。
object Main { def main(args: Array[String]): Unit = { val add = (x: Int, y: Int) => x + y println(add(1,2)) // => 3 println(add) // => Main$$$Lambda$15/0x0000000800081200@37d31475 } } 関数の実態は、FunctionN トレイトを実装したオブジェクトらしいです。 以下の書き方と同じになります。