これは、Play Framework に付属するサンプルから取得したアクション構成です。
def IsAuthenticated(f: => String => Request[AnyContent] => Result) = Security.Authenticated(username, onUnauthorized) { user =>
Action(request => f(user)(request))
}
したがって、andをSecurity.Authenticated
取り、2 番目の括弧のグループはusername: RequestHeader => Option[String]
onAuthorized: RequestHeader=>SimpleResult
String => Action[A]
そして、コントローラーには次のものがあります。
def index = isAuthenticated { ...code }}
上のコードがこれなので、これがf
関数だと思います=> String => Request[AnyContent] => Result
。さて、私が理解していないのは、ここで実際に何が起こっているのかということです. について話しているのではなく、 についてUser.findByEmail....
話しているのですusername => _ => ...
。この関数を直接呼び出した場合、この関数のシグネチャはどのようになりますか?
username => _ =>
User.findByEmail(username).map { user =>
Ok(
html.dashboard(
Project.findInvolving(username),
Task.findTodoInvolving(username),
user
)
)
}.getOrElse(Forbidden)
もしあればdef isAuthenticated(f: => Request[AnyContent] => Result)
、私はそれを使用する方法を知っているだろうし、それを理解するだろう. しかし、余分な「データ」が私を混乱させています。
アップデート:
私は何かを見つけたと思います:
def f2: String => Int => List[Char] = x => _ => x.toList
そして、これは次のように呼び出されます。
f2("Andrew")(2) //there can be anything replacing 2 because I don't have access to it anyway
したがって、私が主に尋ねた上記の機能は次のようになります。
def f: => String => Request[AnyContent] => Result = username => _ => User.find.....
私は正しいですか?
「No by name parameter allowed here エラー」が表示されます。
2 番目のパラメーターを使用しない場合、String => Request => Result
単純にではなく、なぜ使用しているのString => Result
ですか?