val a : Function2[String, String, Unit] = (x,y) => {
val xx = x + y;
println(xx);
}
a("abc", "def")
--------------------
abcdef
上記以外に、{ } の中に 引数リストを書くことができる。
val a : Function2[String, String, Unit] = { (x, y) =>
val xx = x + y;
println(xx);
}
a("hij", "klm")
--------------------
hijklm
引数が1つの場合、引数リストの括弧が省略できるので、このように書くことができる。
val a : Function1[String, Unit] = { x =>
val xx = x + x;
println(xx);
}
a("hij")
--------------------
hijhij
この記法だと 「 x => 」の部分が self-type annotation(自分型アノテーション)と似ているため誤解しやすい。 この書き方は実際に、Play framework の中で以下のような形で頻出する。
object Application extends Controller {
def index = Action { request =>
Ok("Accept-Language: "
+ request.headers.get("Accept-Language").get)
}
}
Ok(...) の部分は、「 Status.apply[C](C):SimpleResult[C] 」が実行されるので、
上の構文では Action.apply を
Function1[ play.api.mvc.Request, play.api.mvc.Result ]
を引数にして実行する関数が定義されていることになる。
0 件のコメント:
コメントを投稿