Прежде всего, руководство пользователя к моему ответу: я буду использовать курсив , чтобы указать функцию, которая используется без явного имени (см. анонимные функции ).
IsAuthenticated - метод, который принимает в качестве параметра аргумент f.
f - это функция, которая принимает Y в качестве параметра и создает экземпляр Result
Y - это функция, которая принимает Z в качестве параметра и создает экземпляр запроса [AnyContent]
Z - это функция, которая не принимает параметров и возвращает строку
IsAuthenticated вызывает Security.Authenticated, передавая имя пользователя и onUnauthorized (функция для вызова, когда пользователь не авторизован для выполнения запрошенного действия).
Я не совсем уверен, что здесь происходит, сам - я еще не очень хорошо разбираюсь в Scala - но мое предположение в том, что Security.Authenticated - это класс case и следующее эквивалентно его наследованию и добавлению конструктора в Java:
{
Action(request => f(user)(request))
}
Если большая часть моего предположения верна, то вызывается Action (который является методом в Security.Authenticated), передавая в качестве аргумента A .
A - это функция, которая принимает объект Request (я предполагаю это имя класса) и выдает результат. Использование Результата подразумевается здесь, потому что реализация A является вызовом f.
Таким образом, когда создается экземпляр подкласса Security.Authenticated, вызывается Action, которая аутентифицирует пользователя для какого-либо действия (указанного как строка), а затем, если пользователь аутентифицирован, возвращает f (исходный параметр), который предположительно вызывается по действию (после вышеупомянутой аутентификации). Этот вызов f возвращает Result, который также является функцией. Затем, наконец, результат вызывается с запросом (который был передан A ) в качестве параметра.