objetos metodos herencia funciones clases scala implicit

metodos - Palabra clave implícita antes de un parámetro en la función anónima en Scala



metodos en scala (3)

Aquí hay dos características distintas.

Primero, la request no es realmente un argumento en una invocación a un método. Es el argumento de una función anónima. La función anónima en sí misma es el argumento de la invocación al método.

En segundo lugar, declarar un argumento implícito en una función anónima tiene la conveniencia de evitar que "fuerce" un valor a un valor implícito:

Action { request => implicit val r = request Ok("Got request [" + request + "]") }

Sé que este es un código de Play framework, pero no estoy seguro de cuáles son las firmas para Action y Ok. Adivinaré que son algo así:

def Action(r:Request => Result):Unit case class Ok(str:msg)(implicit r:Request)

Una vez más, es pura adivinación con fines ilustrativos solamente.

Comprendo parámetros implícitos y conversiones implícitas en Scala, pero lo vi por primera vez hoy: la palabra clave implícita frente a un parámetro en una función anónima:

Action { implicit request => Ok("Got request [" + request + "]") }

¿Qué hace la palabra clave implícita aquí?

¿Hay recursos en la web que describan más sobre el caso de uso?


En mi entender, la palabra clave de implícito significa dejar que el compilador haga el trabajo

La declaración de una variable implícita significa que se puede usar como parámetro implícito de otros métodos dentro del alcance. En otras palabras, el compilador está considerando la variable para completar los parámetros implícitos.

def index = Action { implicit request => val str = sayHi("Jason") Ok(views.html.index("Your new application is ready." + str)) } private def sayHi(name: String)(implicit req: Request[AnyContent]) = name + ", you can the following content" + req.body

Declaro un parámetro implícito req in sayHi con tipo Request[AnyContent] , sin embargo, puedo llamar al método con solo el primer parámetro sayHi("Jason") porque el compilador rellena el parámetro implicit req para hacer referencia a la request variable implícita