【发布时间】:2016-11-06 20:54:30
【问题描述】:
这个问题严格来说是关于 Scala 语法的,尽管它包含一些来自 akka 的代码(例如)。
我对 Scala 还是很陌生。深入研究 akka 的源代码,我想出了以下非常奇怪的方法:
def transform[C]
(f: ExecutionContext ⇒ Materializer ⇒ Future[B] ⇒ Future[C]): Unmarshaller[A, C] =
Unmarshaller.withMaterializer { implicit ec ⇒ implicit mat ⇒ a ⇒ f(ec)(mat)(this(a)) }
其中Unmarshaller.withMaterializer定义为
def withMaterializer[A, B](f: ExecutionContext ⇒ Materializer => A ⇒ Future[B]): Unmarshaller[A, B]
这里发生了什么?什么是可怕的功能f: ExecutionContext => Materializer => Future[B] => Future[C]。而我觉得更奇怪的是implicits:implicit ec => implicit mat => a => f(ec)(mat)(this(a))的序列虽然withMaterializer根本没有隐式参数。
这些序列中的隐含是什么意思?
【问题讨论】: