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
Encontrado algunos recursos:
https://issues.scala-lang.org/browse/SI-1492
https://.com/a/5015161/480674
buscar "Argumentos implícitos en cierres" en el segundo enlace