scala implicit

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.