は、私はこの方法は、このようなコードを持つことができることを理解:プレイを閲覧しながら、この方法を意味メソッドパラメータの複数の連続した太い矢印はScalaで何を意味しますか?
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))
}
}
f: User => Request[AnyContent] => Result
はどういう意味:フレームワークのコードは、私が判読できないメソッドを持つ形質を見つけ?一見すると、それは、タイプRequestの関数r
を返すメソッドのように見えます。 r
はResult
を返します。
これは正しい仮定ですか?
[OK]を、クール。しかし、なぜこれを指定する必要がありますか?コンパイラが 'Request'が返す型を推論できないのはなぜですか?編集:気にしない、私は、Requestのサブタイプが異なるタイプの結果を返すことができると思います。 –
@ CameronA.Ellis私はあなたのコメントを理解しているかどうかはわかりません。 'Request'オブジェクトは何も返しません。 'Request [AnyContent] => Result'型の' f'によって返された関数は、 'Result'を返します。 'Request'オブジェクトを返す' Request'オブジェクトを返した 'f'のように見えるので、戻り値の型は関数の型から除外することはできません。 – sepp2k
そのことを明確にしてくれてありがとう。今、完全に理解します。 –