scala - Cats Future Monad 给出运行时异常

标签 scala monads future scala-cats

import cats.Monad
import cats.instances.future._
import scala.concurrent._
import scala.concurrent.duration._

import scala.concurrent.ExecutionContext.Implicits.global

val fm = Monad[Future]

Await.result(
  fm.flatMap(fm.pure(1)) {
    x => fm.pure(x+2)
  }, 1.second
)

这给了我一个运行时异常,我不明白为什么。我使用的是 scala 版本 2.12.2 和 cats 版本 cats-core_2.12

java.lang.NoClassDefFoundError: Could not initialize class $line9.$read$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$ at scala.concurrent.Future.$anonfun$flatMap$1(Future.scala:302) at scala.concurrent.impl.Promise.$anonfun$transformWith$1(Promise.scala:37) at scala.concurrent.impl.CallbackRunnable.run(Promise.scala:60) at scala.concurrent.impl.ExecutionContextImpl$AdaptedForkJoinTask.exec(ExecutionContextImpl.scala:140) at java.util.concurrent.ForkJoinTask.doExec(ForkJoinTask.java:289) at java.util.concurrent.ForkJoinPool$WorkQueue.runTask(ForkJoinPool.java:1056) at java.util.concurrent.ForkJoinPool.runWorker(ForkJoinPool.java:1692) at java.util.concurrent.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:157) java.util.concurrent.TimeoutException: Futures timed out after [1 second] at scala.concurrent.impl.Promise$DefaultPromise.ready(Promise.scala:255) at scala.concurrent.impl.Promise$DefaultPromise.result(Promise.scala:259) at scala.concurrent.Await$.$anonfun$result$1(package.scala:215) at scala.concurrent.BlockContext$DefaultBlockContext$.blockOn(BlockContext.scala:53) at scala.concurrent.Await$.result(package.scala:142) ... 43 elided

最佳答案

这些错误通常意味着您的依赖项中有同一库的两个非二进制兼容版本。尝试运行 sbt evicted 并查明是否有任何 cats-core 版本被逐出。

然后您必须确保每个人都使用相同的版本(可能您只需将您的版本更新到最新可用版本)。

关于scala - Cats Future Monad 给出运行时异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45592069/

相关文章:

c# - Flutter中 'Future<dynamic>'的实例

scala - 使用 Monoids 在 Scala 中制作包

haskell - Haskell中的"Truly"惰性IO

asynchronous - 如何有条件地退还不同类型的 future ?

haskell - 在 Haskell 中实现这个 monad/类型?

haskell - 用于对已完成操作进行类型检查的 Monad Transformer

java - 从 try 资源结构返回 Future

scala - 喷拒不转换为状态码?

scala - 字符串被视为幺半群

scala - 在 Scala 中,我可以仅将某些文字隐式转换为我的自定义类型吗?