2017-08-09 9 views
1
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と猫バージョンの猫-core_2.12猫ランタイム例外を与える未来のMonad

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

答えて

3

これらのエラーは通常、あなたの依存関係で同じライブラリの二つの非バイナリ互換性のあるバージョンを持っている意味を使用しています。 sbt evictedを実行し、cats-coreのバージョンが削除されているかどうかを確認してください。

誰もが同じバージョンを使用していることを確認する必要があります(使用可能な最新バージョンに更新する必要があります)。

0

これは、SBTコンソールでコードを実行する

https://github.com/scala/bug/issues/9076

REPLのバグによるものですが正常に動作します。

import scala.concurrent._ 
import scala.concurrent.duration._ 
import cats.Monad 
import cats.instances.future._ 
import scala.concurrent.ExecutionContext.Implicits.global 

object Test extends App { 
    println("Inside test") 
    val fm = Monad[Future] 
    val x = Await.result(
    fm.flatMap(fm.pure(1)) { 
     x => fm.pure(x+2) 
    }, 1.second 
) 
    println(x) 
} 
関連する問題