Niejawny parametr dla funkcji literalnej

Podczas czytania Graj! Dokumentacja ramowa, natknąłem się na ten fragment:

def index = Action { implicit request =>
  session.get("connected").map { user =>
    Ok("Hello " + user)
  }.getOrElse {
    Unauthorized("Oops, you are not connected")
  }
}

Dokumentacja wyjaśniaimplicit tam:

Alternatywnie możesz pobrać sesję niejawnie z żądania

Poza tym przeczytałem ten post:Dosłowne z niejawnym i wydaje się logiczne, że funkcja nie może mieć domyślnego parametru.

Jeśli dobrze zrozumiałem, to dlatego, że afunkcjonować, przeciwnie dometoda ma zawsze umowę (interfejs).

Rzeczywiście, na przykładFunction1[Int, Function1[Int, Int]] ma jako pierwszy parametr typu zwracanego anInti tym samym uniemożliwia nam przypisywanie tego jakoimplicit. Doprowadziłoby to do zamieszania w związku z typem powrotu wysokiego poziomu:() => Int lubInt => Int ...

W związku z tym, co poprzedni kod urywkowy zachowuje się z ukrytym od początkuActionwymagany parametr jest funkcją dosłowną.

Myślę, że powodem, dla którego kompilator może zaakceptować ten kod, jest wiele podpisówAction.apply() metoda:

def apply(block: Request[AnyContent] => Result): Action[AnyContent]def apply(block: => Result): Action[AnyContent] (przekierowanie do pierwszego)

Ponieważ drugi nie potrzebuje jakiegoś parametru, czy ten wybrany jest w obecności ukrytego parametru funkcji literalnej?

questionAnswers(1)

yourAnswerToTheQuestion