scala - ¿Qué significa la palabra clave ''implícita'' cuando se coloca delante del parámetro de expresión lambda?
implicit (1)
He visto este tipo de código muchas veces antes, más recientemente en la lista de correo de usuarios de scala:
context(GUI) { implicit ec =>
// some code
}
context
se define como:
def context[T](ec: ExecutionContext)(block: ExecutionContext => T): Unit = {
ec execute {
block(ec)
}
}
¿Qué propósito logra la keeyword implicit
cuando se coloca delante de un parámetro de expresión lambda?
scala> trait Conn
defined trait Conn
scala> def ping(implicit c: Conn) = true
ping: (implicit c: Conn)Boolean
scala> def withConn[A](f: Conn => A): A = { val c = new Conn{}; f(c); /*cleanup*/ }
withConn: [A](f: Conn => A)A
scala> withConn[Boolean]( c => ping(c) )
res0: Boolean = true
scala> withConn[Boolean]{ c => implicit val c1 = c; ping }
res1: Boolean = true
scala> withConn[Boolean]( implicit c => ping )
res2: Boolean = true
La última línea es esencialmente una taquigrafía para la segunda última.