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 件のコメント:
コメントを投稿