関数を返す関数を作る
ScalaByExample - Chapter 5.2 Curryingより。関数を戻り値として返す関数を作ってみます。
- 引数で渡す場合と同様に、戻り値型を「<仮引数名>:<引数型..> => <戻り値型>」とすることで関数を返すことを示します。
- 後は戻り値として関数を返せばOK
// 関数を返す関数の定義 // 戻り値型を「<引数型..> => <戻り値型>」とする。(引数で渡すときと一緒) def sum( i:int ):(int)=>int = { def _sum( j:int ) = i+j _sum } println( sum(3)(5) ) // 8 // 変数や定数で覚えておくこともできる var sumVar = sum(3) val sumVal = sum(3) println( sumVar(5) ) // 8 println( sumVal(5) ) // 8
実行結果です。
8 8 8
↓とすることでも「sum(3)(5)」と呼び出せる関数を定義できます。
// ↓とすることでも「sum(3)(5)」と呼び出せる関数を定義できる。 // 関数は返してないけど。 def sum( i:int )( j:int ):int = { i+j } println( sum(3)(5) ) // 8
実行結果です。
8