【问题标题】:Implicit ExecutionContext in traits特征中的隐式 ExecutionContext
【发布时间】:2014-06-04 20:18:32
【问题描述】:

我希望将隐式 ExecutionContext 传递给部分实现的特征。 在代码示例中:

import scala.concurrent.Future

trait Processor[T,R] {
  def process(op:T): Future[R] = {
    //Do something to get stuff from abstract methods
    Future {
      //Do something that returns type R
    }
  }
}

这将要求一个 ExecutionContext,所以我将声明更改为:

import scala.concurrent.Future
import scala.concurrent.ExecutionContext

trait Processor[T,R] {
  def process(op:T)(implicit executor: ExecutionContext): Future[R] = {
    //Do something to get stuff from abstract methods
    Future {
      //Do something that returns type R
    }
  }
}

但是当我尝试像这样扩展特征时:

import scala.concurrent.ExecutionContext.Implicits.global

class StringProcessor extends Processor[String,String] {
  //Bla bla bla
}

编译器告诉我方法过程没有实现,我的类应该是抽象的。

如何确保我的构造可以正常工作,而不必在 trait 声明中添加 implicit val xc:ExecutionContext

【问题讨论】:

    标签: scala concurrency


    【解决方案1】:

    我似乎对以下代码没有任何问题,它与您的代码类似,但提供了完整的实现。不知道是什么问题。

    import scala.concurrent.Future
    import scala.concurrent.ExecutionContext
    
    trait Processor[T,R] {
      def process(op:T)(implicit executor: ExecutionContext): Future[R] = {
        //Do something to get stuff from abstract methods
        Future {
          getR
        }
      }
    
      def getR:R
    }
    
    class StringProcessor extends Processor[String,String] {
      def getR = "foo"
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-02-04
      • 2018-03-21
      • 2012-10-24
      • 1970-01-01
      相关资源
      最近更新 更多