【发布时间】:2019-10-02 06:55:18
【问题描述】:
在带有猫的 Scala 中:
import scala.concurrent.{Future, ExecutionContext}
implicit def futureFunctor
(implicit ec: ExecutionContext): Functor[Future] = …
每当我们为 Future 调用 Functor 时,要么直接使用 Functor.apply 或间接通过 map 扩展方法,编译器 将通过隐式解析定位futureFunctor并递归搜索 用于调用站点的 ExecutionContext。这是什么 展开 可能看起来像:
// We write this:
Functor[Future]
// The compiler expands to this first:
Functor[Future](futureFunctor)
// And then to this:
Functor[Future](futureFunctor(executionContext))
好的,我试试:
import scala.concurrent.{Future, ExecutionContext}
implicit def futureFunctor
(implicit ec: ExecutionContext): Functor[Future] = new Functor[Future] {
override def map[A, B](fa: Future[A])(f: A => B): Future[B] =fa map f
}
Functor[Future].map(Future.successful(2))(_+1)
但是得到一个例外:
错误:(29, 10) 找不到参数实例的隐式值: cat.Functor[scala.concurrent.Future]
Functor[Future].map(Future.successful(2))(_+1)
我通常会修复为:
import cats.instances.future._
但修复没有帮助。而且我不能导入它,因为在隐含的futureFunctor 范围内已经定义了。
我错过了什么?
【问题讨论】:
标签: scala future implicit scala-cats