Scala ひと巡り : 高階関数 (Higher-Order Functions)

原ページ

Scala では、高階関数を定義できます。それらは、パラメータに他の関数をとるか、あるいは、その結果が関数であるような、関数です。

次は、他の関数 f と値 v をとり、関数 f を v に適用する、関数 apply です。

def apply(f: Int => String, v: Int) = f(v)

もしコンテキスト上で必要なら、メソッドが関数へ自動的に特化(coerced:強制)されることに注意してください。

次は 1 つの例です:

class Decorator(left: String, right: String) { def layout[A](x: A) = left + x.toString() + right } object FunTest extends Application { def apply(f: Int => String, v: Int) = f(v) val decorator = new Decorator("[", "]") println(apply(decorator.layout, 7)) }

実行すると次の出力となります。:

[7]

この例で、メソッド decorator.layout は、メソッド apply が必要とするときに、型 Int => String の値へ自動的に特化されます。メソッド decorator.layout が多相的メソッドであり(すなわち、いくつかのシグニチャ型にわたっての抽象化)、Scala コンパイラは最初にそのメソッド型を適切にインスタンス化しなければならないことに注意してください。