概要
このあたりからアレになってきてる。 変数に関数オブジェクトを代入できる。
PHPでいうところの可変関数。 なお、変数の型を明示的に宣言できる。
コード
scala> val func = (x:Int, y:Int) => x + y func: (Int, Int) => Int = <function2> scala> func(1,2) res0: Int = 3 scala> val func: (Int,Int) => Int = (x:Int, y:Int) => x + y func: (Int, Int) => Int = <function2> scala> func(1,2) res1: Int = 3
また、トレイトというものが用意されており、 たとえばFunction2なら2つの引数が引数で、最後のひとつが返り値の型となっている。
いわゆる糖衣構文ってやつ。
scala> val func:Function2[Int,Int,Int] = (x:Int, y:Int) => x + y func: (Int, Int) => Int = <function2> scala> def calc(f:(Int,Int) => Int, num:Int) :Int = f(num, num) calc: (f: (Int, Int) => Int, num: Int)Int scala> calc((x,y) => x + y, 10) res2: Int = 20