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 番目はパラメーターを必要としないため、これはリテラル関数の暗黙のパラメーターの存在下で選択されますか?