Scala は純粋オブジェクト指向言語です。これには、数値や関数も含まれます。Java でいうプリミティブ型はありません。
以下の2つは同じ意味になります。
1 + 2 * 3 1.+(2.*(3))
1行目は実際には+メソッドと*メソッドの呼び出しとなっています。これは Scala が自明なメソッド呼び出しの () を省略可能となってるので普通の算術式みたいに書けるのです。
また関数もオブジェクトです。そのため関数を引数に渡したり、それらを変数として格納したり、他の関数からの戻り値としたりすることができます。これらの側面は関数型の特徴ですね。
object Hello extends Application { def speak(greeting: () => unit) { greeting() } def hello() { println("Hello") } speak(hello) }
この例を実行するとHelloとまぁそのまま表示されます。speak関数にhello関数を渡しているわけです。
speak関数の引数の () => unit は引数を取らず、また戻り値も無い全ての関数を表す型であることを意味してます。
無名関数
上の例を無名関数にするとこんな感じ
object Hello extends Application { def speak(greeting: () => unit) { greeting() } speak( () => println("Hello") ) }
結果はまぁ同じ