特质中的隐式ExecutionContext

4

我希望可以将一个隐式的ExecutionContext传递给部分实现的trait。

代码示例:

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,因此我已经更改了声明为:

这将要求一个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
}

编译器告诉我,我的类中的process方法未实现,因此该类应为抽象类。

如何确保我的构造函数能够正常工作,而无需在特质声明中添加implicit val xc:ExecutionContext?

1个回答

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"
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接