Scale高次関数
859 ワード
Scalaでは、高次関数を定義できます.高次関数は、他の関数をパラメータとして、またはその結果が関数です.次に、関数
注:コンテキストが必要な場合、メソッドは自動的に関数として使用されます.
次の例を示します.
実行後の出力:
この例では、方法
apply
、パラメータが別の関数f
、および値v
であり、f
がv
に適用される.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コンパイラは、まずそのメソッドタイプを適切にインスタンス化しなければならない.