- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在带有猫的 Scala 中:
import scala.concurrent.{Future, ExecutionContext}
implicit def futureFunctor
(implicit ec: ExecutionContext): Functor[Future] = …
Whenever we summon a Functor for Future , either directly using Functor.apply or indirectly via the map extension method, the compiler will locate futureFunctor by implicit resolu on and recursively search for an ExecutionContext at the call site. This is what the expansion might look like:
// 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)
但是得到一个异常(exception):
Error:(29, 10) could not find implicit value for parameter instance: cats.Functor[scala.concurrent.Future]
Functor[Future].map(Future.successful(2))(_+1)
我通常会修复为:
import cats.instances.future._
但修复没有帮助。而且我不能导入它,因为在范围内隐式 futureFunctor
已经定义。
我错过了什么?
最佳答案
But get an exception:
这不是异常,这是编译错误。
当你写 implicit def futureFunctor(implicit ec: ExecutionContext) = ...
这意味着应该有一个 ExecutionContext
在适用范围。但是当你调用Functor[Future]
时却没有在 Functor[Future].map(Future.successful(2))(_+1)
.
尝试
import scala.concurrent.ExecutionContext.Implicits.global
或
implicit val ec = ExecutionContext.fromExecutor(Executors.newFixedThreadPool(10))
或类似的东西。
顺便说一句,如果你import cats.instances.future._
并定义您的本地 Functor[Future]
看来猫的会用到。
关于Scala 隐式搜索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56144100/
我是一名优秀的程序员,十分优秀!