Подтвердить что ты не робот

Что означает ключевое слово "неявное", когда оно помещается перед параметром выражения лямбда?

Я видел такой код много раз раньше, совсем недавно в списке рассылки scala -user:

context(GUI) { implicit ec =>
  // some code
}

context определяется как:

def context[T](ec: ExecutionContext)(block: ExecutionContext => T): Unit = { 
  ec execute { 
    block(ec) 
  } 
}

Какая цель достигается при достижении keeyword implicit при размещении перед параметром выражения лямбда?

4b9b3361

Ответ 1

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

Последняя строка по существу является сокращением для второго последнего.