0

Play フレームワークの公式ドキュメントが推奨requestするように、リクエストに関連付けられたいくつかのオブジェクトへのアクセスを改善するために暗黙を使用できます。

サンプル:

def index = Action { implicit request =>
  session.get("connected").map { user =>
    Ok("Hello " + user)
  }.getOrElse {
    Unauthorized("Oops, you are not connected")
  }
}

これは、トレイトimplicitに属する次のメソッドが追加されたためです。Controller

/**
   * Retrieves the session implicitly from the request.
   *
   * For example:
   * {{{
   * def index(name:String) = Action { implicit request =>
   *   val username = session("username")
   *   Ok("Hello " + username)
   * }
   * }}}
   */
  implicit def session(implicit request: RequestHeader) = request.session

質問: このメソッド自体が として宣言されているのはなぜimplicitですか? requestパラメータを として宣言するだけで十分ではありませんimplicitか?

私は代わりにそれを見ることを期待していました:

def session(implicit request: RequestHeader) = request.session

4

1 に答える 1

1

サンプルをコンパイルするには、最初のimplicitキーワードはまったく必要ありません。つまり、Play! のエラーか、追加のimplicitキーワードが別の役割を果たすことを意図していたかのいずれかです。

特に、この追加のキーワードを使用すると、スコープ内に type の暗黙的な値しかない場合でもimplicit、 type の暗黙的な値を期待するメソッドを呼び出すことができます( type の暗黙的な値がある場合は、 typeの暗黙的な値も定義します)。範囲)。SessionRequestHeadersessionRequestHeaderRequestHeader

于 2013-04-08T23:31:58.653 に答える