-
http://blog.madhukaraphatak.com/scala-magnet-pattern/ 에 따르면 정상 실행되야 하지만 나는 안 됨
scala> :paste // Entering paste mode (ctrl-D to finish) import scala.concurrent.Future import scala.concurrent.Await import scala.concurrent.duration.Duration sealed trait FutureMagnet { type Result def apply() : Result } def completeFuture(magnet: FutureMagnet):magnet.Result = magnet() object FutureMagnet { implicit def intFutureCompleter(future:Future[Int]) = new FutureMagnet { override type Result = Int override def apply(): Result = Await.result(future,Duration.Zero) } implicit def stringFutureCompleter(future:Future[String]) = new FutureMagnet { override type Result = String override def apply(): Result = Await.result(future,Duration.Zero) } } scala> completeFuture( Future {1}) ^ error: Cannot find an implicit ExecutionContext. You might pass an (implicit ec: ExecutionContext) parameter to your method. The ExecutionContext is used to configure how and on which thread pools Futures will run, so the specific ExecutionContext that is selected is important. If your application does not define an ExecutionContext elsewhere, consider using Scala's global ExecutionContext by defining the following: implicit val ec: scala.concurrent.ExecutionContext = scala.concurrent.ExecutionContext.global
-
-
Save hyunjun/637a2dcf575c914a2be1e5401395f687 to your computer and use it in GitHub Desktop.
scala concurrent
-
method overload이 실패. 원인은 type erasure때문
scala> import scala.concurrent.Future import scala.concurrent.Future scala> import scala.concurrent.Await import scala.concurrent.Await scala> import scala.concurrent.duration.Duration import scala.concurrent.duration.Duration scala> def completeFuture(value: Future[String]): String = Await.result(value, Duration.Zero) completeFuture: (value: scala.concurrent.Future[String])String scala> def completeFuture(value: Future[Int]): Int = Await.result(value, Duration.Zero) completeFuture: (value: scala.concurrent.Future[Int])Int scala> completeFuture(Future {1}) ^ error: Cannot find an implicit ExecutionContext. You might pass an (implicit ec: ExecutionContext) parameter to your method. The ExecutionContext is used to configure how and on which thread pools Futures will run, so the specific ExecutionContext that is selected is important. If your application does not define an ExecutionContext elsewhere, consider using Scala's global ExecutionContext by defining the following: implicit val ec: scala.concurrent.ExecutionContext = scala.concurrent.ExecutionContext.global scala> completeFuture(Future {"Hello"}) ^ error: type mismatch; found : String("Hello") required: Int
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment