Trait

先ほど例で使用したfunc変数は「(Int,Int) => Int」という型を宣言していましたが、次のように記述しても同様の関数オブジェクトが定義可能です。

```

scala> val func:Function2[Int,Int,Int] = (x:Int, y:Int) => x + y
func: (Int, Int) => Int = <function2>

```
この「Funtion2」とは、何でしょうか? Scalaでは、関数の引数に応じて「トレイト」(いまのところ、Javaでいう「インターフェイス」のようなものと思っていてください)が用意されており、Function0からFunction22まであります。

そのため、Function2は引数を2つ取る関数のトレイトを表しています。例の型パラメータは最初の2つが引数の型を示しており、最後の1つが返り値の型を示しています。

関数の型を使用した形式は、Functionトレイトを使用した記述の糖衣構文です。