Play! を読みながら フレームワークのドキュメント、私はこのスニペットに出くわしました:
def index = Action { implicit request =>
session.get("connected").map { user =>
Ok("Hello " + user)
}.getOrElse {
Unauthorized("Oops, you are not connected")
}
}
ドキュメンテーションはそこで説明しimplicitます:
または、リクエストから暗黙的にセッションを取得することもできます
その上、私はこの投稿を読みました: Literal with Implicit論理的には、関数は暗黙的なパラメーターを持つことができないようです。
私がよく理解した場合、これはメソッドとは対照的に、関数には常に契約(インターフェース)があるためです。
実際、たとえば、Function1[Int, Function1[Int, Int]]戻り値の型の最初のパラメーターとして anがあるIntため、これに として注釈を付けることができませんimplicit。これは、高レベルの戻り値の型について混乱を招く可能性があります:() => IntまたはInt => Int ...
したがって、 firstActionの必須パラメーターはリテラル関数であるため、前のスニペット コードが暗黙的に動作するもの。
Action.apply()コンパイラがこのコードを受け入れることを許可する理由は、メソッドの複数の署名であると思います。
def apply(block: Request[AnyContent] => Result): Action[AnyContent]def apply(block: => Result): Action[AnyContent](最初のものにリダイレクト)
2 番目はパラメーターを必要としないため、これはリテラル関数の暗黙のパラメーターの存在下で選択されますか?