Scale高次関数

859 ワード

Scalaでは、高次関数を定義できます.高次関数は、他の関数をパラメータとして、またはその結果が関数です.次に、関数apply、パラメータが別の関数f、および値vであり、fvに適用される.
def apply(f: Int => String, v: Int) = f(v)

注:コンテキストが必要な場合、メソッドは自動的に関数として使用されます.
次の例を示します.
class Decorator(left: String, right: String) {
  def layout[A](x: A) = left + x.toString() + right
}

object FunTest extends App {
  def apply(f: Int => String, v: Int) = f(v)
  val decorator = new Decorator("[", "]")
  println(apply(decorator.layout, 7))
}

実行後の出力:
[7]

この例では、方法applyが必要であるため、方法decorator.layoutは、Int => Stringのタイプの値として自動的に使用される.なお、方法decorator.layoutは、署名タイプを抽象化するマルチステートメソッドであり、Scalaコンパイラは、まずそのメソッドタイプを適切にインスタンス化しなければならない.