Prima di tutto una guida per l'utente alla mia risposta: Userò corsivo per indicare una funzione che viene utilizzata senza essere esplicitamente denominata (vedere anonymous functions).
IsAuthenticated è un metodo che accetta come parametro un argomento f.
f è una funzione che prende Y come parametro e produce un'istanza di risultati
Y è una funzione che prende Z come parametro e produce un'istanza Request [AnyContent]
Z è una funzione che non accetta parametri e restituisce una stringa
IsAuthenticated chiama Security.Authentic attivato, passando nome utente e onUnauthorized (una funzione da chiamare quando l'utente non è autorizzato a eseguire l'azione richiesta).
Non sono del tutto sicuro di quello che sta succedendo qui passato myself- io non sono abbastanza che il bene con Scala ancora- ma la mia ipotesi è che Security.Authenticated è una classe caso, e la seguente è equivalente a sottoclassi e aggiungendo un costruttore in Java:
{
Action(request => f(user)(request))
}
Se che gran parte della mia ipotesi è corretta, allora Azione (che è un metodo su Security.Authenticated) viene chiamato, passando come argomento un a.
A è una funzione che accetta un oggetto di Richiesta (sto indovinando con questo nome di classe) e produce un Risultato. L'utilizzo di Result è implicito qui perché l'implementazione di A è una chiamata a f.
Così quando viene instanciata la sottoclasse di Security.Authenticated, viene chiamato Action, che autentica l'utente per qualche azione (specificata come String) e quindi se l'utente è autenticato, restituisce f (il parametro originale) che è presumibilmente chiamato da Action (dopo l'autenticazione di cui sopra). Questa chiamata a f restituisce un risultato, che è anche una funzione. Il risultato viene infine chiamato con la richiesta (che è stata passata a A) come parametro.
fonte
2011-12-21 22:55:16
C'è un modo per rappresentarlo usando la sintassi java, so che non è lo stesso ma potrebbe aiutarmi a capire la firma del metodo. Sto attraversando un periodo difficile con l'ordine delle operazioni qui. – chiappone