12

メソッドには次のようなコードを含めることができることを理解しています。

def m(p1:Int => Int) ...

つまり、このメソッドは Int を返す関数 p1 を取ります

しかし、プレイをブラウジングしながら!フレームワーク コード 判読できないメソッドを持つトレイトを見つけました:

trait Secured {

  def username(request: RequestHeader) = request.session.get(Security.username)

  def onUnauthorized(request: RequestHeader) = Results.Redirect(routes.Auth.login)

  def withAuth(f: => String => Request[AnyContent] => Result) = {
    Security.Authenticated(username, onUnauthorized) { user =>
      Action(request => f(user)(request))
    }
  }

  /**
   * This method shows how you could wrap the withAuth method to also fetch your user
   * You will need to implement UserDAO.findOneByUsername
   */
  def withUser(f: User => Request[AnyContent] => Result) = withAuth { username => implicit request =>
    UserDAO.findOneByUsername(username).map { user =>
      f(user)(request)
    }.getOrElse(onUnauthorized(request))
  }
}

遊ぶ!Scala セキュリティ

とはf: User => Request[AnyContent] => Resultどういう意味ですか? 一見すると、rRequest 型の関数を返すメソッドのように見えます。rを返しますResult

これは正しい仮定ですか?

4

2 に答える 2

17

f: User => Request[AnyContent] => Result とはどういう意味ですか? 一見すると、Request 型の関数 r を返すメソッドのように見えます。r は結果を返します。

f型の関数Request[AnyContent] => Result、つまり a を取り、 aRequest[AnyContent]を返す関数を返しますResult

つまりf、カリー化された関数です。f(user)(request)を返すように呼び出すことができますResult

于 2012-12-23T17:47:08.737 に答える
1

def withAuth(f: => String => Request[AnyContent] => Result)つまり、これfは名前によるパラメーターであり、次のように記述できます。

withAuth {
  logger.info("Here we go")
  ...
  chooseTheAction("list")
}

どこでchooseTheActionを受け取り、Stringリクエストを実行する関数を返します。Request[AnyContent] => Result

于 2012-12-23T22:30:20.217 に答える